Poj 1331 Multiply, poj1331multiply
Multiply
Time Limit:1000 MS |
|
Memory Limit:10000 K |
Total Submissions:5179 |
|
Accepted:2773 |
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 running 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 shocould 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 shoshould contain one integer which is the smallest base for which p * q = r. if there is no such base, your program shocould output 0.
Sample Input
36 9 4211 11 1212 2 2
Sample Output
1330
Question: Give you three numbers: p, q, r. Ask which smallest Base p * q = r;
Note: If the number on each of p, q, and r in k should be smaller than k;
#include <iostream>#include <string.h>using namespace std;int change(char *a,int k){int len=strlen(a);int ans=0;for (int i=0;i<len;i++){ans = ans*k + a[i]-'0';}return ans;}bool isBig(char *a,int k){int len=strlen(a);for (int i=0;i<len;i++){if (a[i]-'0'>=k)return false;}return true;}int main(){char a[10],b[10],r[10];int t,i;cin>>t;while (t--){cin>>a>>b>>r;for (i=2;i<=16;i++){if (isBig(a,i)==true && isBig(b,i)==true && isBig(r,i)==true){int aa = change(a,i);int bb = change(b,i);int rr = change(r,i);long long ans = aa*bb;long long ans2 = rr;if (ans==ans2)break;}}if (i==17)i=0;cout<<i<<endl;}return 0;}