Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- #include <cmath>
- using namespace std;
- int converter10(char string[100000], char digits[100], int basis) {
- int amount = strlen(string), summ = 0, digit_equivalent, i = 0;
- for (amount; amount > 0; amount--) {
- for (int j = 0; j < 35; j++) {
- if (string[amount - 1] == digits[j]) {
- digit_equivalent = j;
- summ += digit_equivalent * pow(basis, i);
- break;
- }
- }
- i++;
- digit_equivalent = 0;
- }
- return summ;
- }
- void converter_x(long int number, char otvet[100000], char digits[100000], int basis) {
- int i = 0, ostatok = 0, int_part = 0;
- while (number / basis > 0) {
- ostatok = number % basis;
- int_part = number / basis;
- otvet[i] = digits[ostatok];
- i++;
- number = int_part;
- }
- if (number / basis == 0) {
- otvet[i] = digits[number];
- }
- }
- int main() {
- setlocale(LC_ALL, "Russian");
- char default_number[100000], new_number[100], digit_mass[100] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'G', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
- long int default_basis, new_basis, min_default_basis = 0;
- cout << "Введите исходное число: ";
- cin >> default_number;
- memset(&new_number, 0, sizeof(new_number));
- for (int i = 0; i < strlen(default_number); i++) {
- for (int j = 0; j < strlen(digit_mass); j++) {
- if ((default_number[i] == digit_mass[j]) && j >= min_default_basis) {
- min_default_basis = j;
- break;
- }
- }
- }
- cout << "Введите систему счисления исходного числа: ";
- cin >> default_basis;
- if (default_basis < min_default_basis + 1) {
- cout << "Введенное вами основание слишком маленькое. Введите другое: ";
- }
- else {
- cout << "Введите новое основание для этого числа: ";
- cin >> new_basis;
- if (new_basis == default_basis) {
- cout << "Переведенное число: " << default_number << endl;
- }
- else if (new_basis == 10) {
- cout << "Переведенное число: " << converter10(default_number, digit_mass, default_basis) << endl;
- }
- else {
- long int new_chislo = converter10(default_number, digit_mass, default_basis);
- converter_x(new_chislo, new_number, digit_mass, new_basis);
- int x = strlen(new_number) - 1;
- cout << "Переведенное число: ";
- for (x; x >= 0; x--) {
- cout << new_number[x];
- }
- cout << endl;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement