百练 2972 确定进制 解题报告

思路:选择一个进制B,按照该进制将被乘数,乘数,乘积分别转换成10进制,然后判断等式是否相等。输出使得等式相等的最小的B即为所求。

代码:

#include<stdio.h>
#include<string.h>

long b2ten(char *x, int b)
{
    int ret = 0;
    int len = strlen(x);
    for(int i = 0; i < len; i++)
    {
        if(x[i] - '0' >= b)
            return -1;
        ret *= b;
        ret += x[i] - '0';
    }
    return (long)ret;
}
int main()
{
    int n, b;
    char p[8], q[8], r[8];
    long pval, qval, rval;

    scanf("%d", &n);
    while(n--)
    {
        scanf("%s%s%s", p, q ,r);
        for(b = 2; b <=16; b++)
        {
            pval = b2ten(p, b);
            qval = b2ten(q, b);
            rval = b2ten(r, b);
            if(pval == -1 || qval == -1 || rval == -1)
                continue;
            if(pval * qval == rval)
            {
                printf("%d
", b);
                break;
            }
        }
        if(b == 17)
            printf("0
");
    }
    return 0;

}
原文地址:https://www.cnblogs.com/la0bei/p/3603303.html