题目连接:http://poj.grids.cn/practice/2972/

 1 /* 功能Function Description:
 2    开发环境Environment:          DEV C++ 4.9.9.1
 3    技术特点Technique:
 4    版本Version:
 5    作者Author:                    可笑痴狂
 6    日期Date:                      20120730
 7    备注Notes:
 8     描述
 9         6*9 = 42 对于十进制来说是错误的,但是对于13进制来说是正确的。即, 6(13) * 9(13) = 42(13), 而 42(13) = 4 * 131 + 2 * 130 = 54(10)。 你的任务是写一段程序读入三个整数p、q和 r,然后确定一个进制 B(2<=B<=16) 使得 p * q = r. 如果 B有很多选择, 输出最小的一个。例如: p = 11, q = 11, r = 121. 则有 11(3) * 11(3) = 121(3) 因为 11(3) = 1 * 31 + 1 * 30 = 4(10) 和 121(3) = 1 * 32 + 2 * 31 + 1 * 30 = 16(10)。 对于进制 10,有 11(10) * 11(10) = 121(10)。这种情况下,应该输出 3。如果没有合适的进制,则输出 0。
10     输入
11         输入有 T组测试样例。 T在第一行给出。每一组测试样例占一行,包含三个整数p、q、r。 p、q、r的所有位都是数字,并且1 <= p、q、r <= 1,000,000。
12     输出
13         对于每个测试样例输出一行。该行包含一个整数:即使得p * q = r成立的最小的B。如果没有合适的B,则输出 0。
14     样例输入
15         3
16         6 9 42
17         11 11 121
18         2 2 2
19     样例输出
20         13
21         3
22         0
23 */
24 
25 
26 #include<stdio.h>
27 #include<math.h>
28 
29 int findmin(int p,int q,int r)//寻找p、q、r三个数中每位上最大的数字max,则该数的进制数一定大于max
30 {
31     int max=0;
32     while(p)
33     {
34         if(p%10>max)
35             max=p%10;
36         p/=10;
37     }
38     while(q)
39     {
40         if(q%10>max)
41             max=q%10;
42         q/=10;
43     }
44     while(r)
45     {
46         if(r%10>max)
47             max=r%10;
48         r/=10;
49     }
50     return max;
51 }
52 
53 int change(int num,int i) //把i进制数num转化十进制数返回
54 {
55     int sum,b;
56     sum=b=0;
57     while(num)
58     {
59         sum+=num%10*pow(i,b++);
60         num/=10;
61     }
62     return sum;
63 }
64 
65 int main()
66 {
67     int T,i,p,q,r,t1,t2,t3;
68     scanf("%d",&T);
69     while(T--)
70     {
71         scanf("%d%d%d",&p,&q,&r);
72         i=findmin(p,q,r)+1;   //i为可能的最小进制数
73         for(;i<=16;++i)
74         {
75             t1=change(p,i);
76             t2=change(q,i);
77             t3=change(r,i);
78             if(t1*t2==t3)
79                 break;
80         }
81         if(i>16)
82             printf("0\n");
83         else
84             printf("%d\n",i);
85     }
86     return 0;
87 }

 

posted on 2012-07-30 16:31  可笑痴狂  阅读(465)  评论(0编辑  收藏  举报