百练 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\n", b);
                break;
            }
        }
        if(b == 17)
            printf("0\n");
    }
    return 0;

}

 

posted on 2014-03-16 13:55  stackhacks  阅读(241)  评论(0编辑  收藏  举报

导航