Как я могу найти основание числа, если мне дают число с основанием 10 и такое же число, преобразованное в любое основание, которое нам нужно найти - PullRequest
1 голос
/ 11 октября 2019

Давайте рассмотрим пример. Мои два входа - это 90 для базы 10 и 10100 для базы, которую нам нужно найти. Я использую метод грубой силы, чтобы найти ответ. Ответ будет 3, так как 10100 для базы 3 равен 90. Есть ли другой подход или лучший способ?

int val(char c) 
{ 
    if (c >= '0' && c <= '9') 
        return (int)c - '0'; 
    else
        return (int)c - 'A' + 10; 
} 

// Function to convert a number from given base 'b' 
// to decimal 
int toDeci(string str, int base) 
{ 
    int len = str.length(); 
    int power = 1; // Initialize power of base 
    int num = 0;  // Initialize result 
    int i; 

    // Decimal equivalent is str[len-1]*1 + 
    // str[len-1]*base + str[len-1]*(base^2) + ... 
    for (i = len - 1; i >= 0; i--) 
    { 
        // A digit in input number must be 
        // less than number's base 
        if (val(str[i]) >= base) 
        {
           return -1; 
        } 

        num += val(str[i]) * power; 
        power = power * base; 
    } 

    return num; 
}

int main()
{
    int decimal; string x;
    cin >> decimal >> x;
    for(int i = 2; i <= 36; i++)
    {
        if(toDeci(x, i) == decimal)
        {
            cout << "Value of base will be : " << i << endl;
            break;
        }
    }
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...