Решение задачи Система счисления с Acmp

Без пояснения   Просмотров: 65


Вчера на уроке математики Саша узнал о том, что иногда полезно использовать вместо десятичной системы счисления какую-нибудь другую.

Однако, учительница не объяснила, почему в системе счисления по основанию b в качестве цифр выбирают числа от 0 до b - 1.

Немного подумав, Саша понял, что можно выбирать и другие наборы цифр. Например, вместо троичной системы счисления можно рассмотреть систему счисления, где вместо обычных цифр 0, 1, 2 есть цифры 1, 2 и 3.

Саша заинтересовался вопросом, а как перевести число n в эту систему счисления? Например, число 7 в этой системе записывается как 21, так как 7 = 2∙3+1, а число 22 записывается как 211, так как 22 = 2 ∙ 9 + 1 ∙ 3 + 1.

Код

#include <bits/stdc++.h>
 
using namespace std;
string func(int n)
{
    string s = "";
    while(n >= 3){
        s.push_back((n % 3) + 48);
        n/=3;
    }
    s.push_back(n + 48);
    reverse(s.begin(),s.end());
    return s;
}
int main()
{
    int n;
    cin >> n;
    string s = func(n);
    int pos = s.find("10");
    while(pos + 1){
        s.replace(pos, 2,"03");
        pos = s.find("10");
    }
    int pos1 = s.find("20");
    while(pos1 + 1){
        s.replace(pos1,2,"13");
        pos1 = s.find("20");
    }
    int pos2 = s.find("30");
    while(pos2 + 1){
        s.replace(pos2 ,2,"23");
        pos2 = s.find("30");
    }
    while(s[0] == '0')
        s.erase(0,1);
    cout << s;
    return 0;
}

         

Администратор Photo Автор: Администратор




Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться