一本通 确定进制

 http://ybt.ssoier.cn:8088/problem_show.php?pid=1413

注意一些细节问题就可以了。

1、余数必定小于进制数

2、注意判断数字范围

1<=p,q,r<=1000000

开始以为p*q会很大,但是实际

p*q<=1000000;

因为p*q=r<10000000;

所以,本身没有必要使用高精度,

但是如果本题目使用高精度来计算。

则需要运用大整数的相关技巧来解决这个问题了。

#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;

int ntoT(int k,int num)//num从k进制转10进制
{
    int w = 1;//weishu
    int ans = 0;
    while (num)
    {
        int y = num % 10;
        if (y > k)//余数必须小于等于进制数
            return -1;
        ans += y*w;
        w *= k;
        num /= 10;
    }
    return ans;
}

int main()
{
    int p, q, r;
    cin >> p >> q >> r;
    int i;
    for (i = 2; i < 41; i++)
    {
        int p1 = ntoT(i, p);
        if (p1 < 0)
            continue;
        int q1 = ntoT(i, q);
        if (q1 < 0)
            continue;
        int r1 = ntoT(i, r);
        if (r1 < 0)
            continue;
        if (p1*q1 == r1)
        {
            cout << i << endl;
            break;
        }
    }
    if(i==41)
        cout << 0 << endl;
    return 0;
}
原文地址:https://www.cnblogs.com/hxh88/p/9346677.html