Description
You are given two positive integers A and B in Base C. For the equation:
We know there always existing many non-negative pairs (k, d) that satisfy the equation above. Now in this problem, we want to maximize k.
For example, A="123" and B="100", C=10. So both A and B are in Base 10. Then we have:
(1) A=0*B+123
(2) A=1*B+23
As we want to maximize k, we finally get one solution: (1, 23)
The range of C is between 2 and 16, and we use 'a', 'b', 'c', 'd', 'e', 'f' to represent 10, 11, 12, 13, 14, 15, respectively.
Input
The first line of the input contains an integer T (T≤10), indicating the number of test cases.
Then T cases, for any case, only 3 positive integers A, B and C (2≤C≤16) in a single line. You can assume that in Base 10, both A and B is less than 2^31.
Output
Sample Input
3 2bc 33f 16 123 100 10 1 1 2
Sample Output
(0,700) (1,23) (1,0)
每一位的数要乘进制 不要只是乘了10
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <queue> #include <vector> #include <iomanip> #include <math.h> #include <map> using namespace std; #define FIN freopen("input.txt","r",stdin); #define FOUT freopen("output.txt","w",stdout); #define INF 0x3f3f3f3f #define INFLL 0x3f3f3f3f3f3f3f #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 typedef long long LL; typedef pair<int,int> PII; const int MAXN = 1000 + 5; char A[MAXN]; char B[MAXN]; int getnum(char a){ if(a >= '0' && a <= '9') return a - '0'; else return a - 'a' + 10; } int main() { //FIN int T, C; scanf("%d", &T); while(T--){ scanf("%s%s", A, B); scanf("%d", &C); int lenA = strlen(A); int lenB = strlen(B); int numA = 0, numB = 0; for(int i = 0;i < lenA; i ++){ numA = numA * C + getnum(A[i]); } for(int i = 0;i < lenB; i ++){ numB = numB * C + getnum(B[i]); } //cout<<numA<<" "<<numB<<endl; int d = numA % numB; int k = numA / numB; printf("(%d,%d) ", k, d); } }