Multiply
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 4287 | Accepted: 2250 |
Description
6*9 = 42" is not true for base 10, but is true for base 13. That is, 6(13) * 9(13) = 42(13) because 42(13) = 4 * 131 + 2 * 130 = 54(10).
You are to write a program which inputs three integers p, q, and r and determines the base B (2<=B<=16) for which p * q = r. If there are many candidates for B, output the smallest one. For example, let p = 11, q = 11, and r = 121. Then we have 11(3) * 11(3) = 121(3) because 11(3) = 1 * 31 + 1 * 30 = 4(10) and 121(3) = 1 * 32 + 2 * 31 + 1 * 30 = 16(10). For another base such as 10, we also have 11(10) * 11(10) = 121(10). In this case, your program should output 3 which is the smallest base. If there is no candidate for B, output 0.
You are to write a program which inputs three integers p, q, and r and determines the base B (2<=B<=16) for which p * q = r. If there are many candidates for B, output the smallest one. For example, let p = 11, q = 11, and r = 121. Then we have 11(3) * 11(3) = 121(3) because 11(3) = 1 * 31 + 1 * 30 = 4(10) and 121(3) = 1 * 32 + 2 * 31 + 1 * 30 = 16(10). For another base such as 10, we also have 11(10) * 11(10) = 121(10). In this case, your program should output 3 which is the smallest base. If there is no candidate for B, output 0.
Input
The input consists of T test cases. The number of test cases (T ) is given in the first line of the input file. Each test case consists of three integers p, q, and r in a line. All digits of p, q, and r are numeric digits and 1<=p,q, r<=1,000,000.
Output
Print exactly one line for each test case. The line should contain one integer which is the smallest base for which p * q = r. If there is no such base, your program should output 0.
Sample Input
3 6 9 42 11 11 121 2 2 2
Sample Output
13 3 0
Source
Source Code
| Problem: 1331 | User: bingshen | |
| Memory: 144K | Time: 0MS | |
| Language: C++ | Result: Accepted |
- Source Code
#include<stdio.h> #include<string.h> #include<stdlib.h> int main() { char a[100],b[100],c[100]; int i,x,y,z,t,l1,l2,l3,m1,m2,m3,m; scanf("%d",&t); while(t--) { scanf("%s%s%s",a,b,c); m=0; bool flag=false; l1=strlen(a); l2=strlen(b); l3=strlen(c); for(i=0;i<l1;i++) { m1=a[i]-'0'; if(m1>m) m=m1; } for(i=0;i<l2;i++) { m2=b[i]-'0'; if(m2>m) m=m2; } for(i=0;i<l3;i++) { m3=c[i]-'0'; if(m3>m) m=m3; } for(i=m+1;i<=16;i++) { x=strtol(a,NULL,i); y=strtol(b,NULL,i); z=strtol(c,NULL,i); if(x*y==z) { flag=true; printf("%d/n",i); break; } } if(!flag) printf("0/n"); } return 0; }
寻找特殊基数解
本文介绍了一个编程问题,即寻找使得两个数相乘等于第三个数的最小基数B(2<=B<=16)。通过输入三个整数p、q和r,程序需要找出满足p*q=r的最小基数B,若无解则输出0。示例展示了如何处理多个测试用例。
481

被折叠的 条评论
为什么被折叠?



