题目链接:http://poj.org/problem?id=2305
ime Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 5326 | Accepted: 2267 |
Description
Given a base b and two non-negative base b integers p and m, compute p mod m and print the result as a base b integer. p mod m is defined as the smallest non-negative integer k such that p = a*m + k for some integer a.
Input
Input consists of a number of cases. Each case is represented by a line containing three unsigned integers. The first, b, is a decimal number between 2 and 10. The second, p, contains up to 1000 digits between 0 and b-1. The third, m, contains up to 9 digits between 0 and b-1. The last case is followed by a line containing 0.
Output
For each test case, print a line giving p mod m as a base-b integer.
Sample Input
2 1100 101 10 123456789123456789123456789 1000 0
Sample Output
10 789
1 #include<stdio.h> 2 #include<iostream> 3 #include<cstring> 4 #include<limits.h> 5 #include<queue> 6 using namespace std; 7 char a[1005],b[10]; 8 long long c,e;//开int会WA 9 int len1,len2; 10 int f[10]; 11 int change1()//把b转换成十进制//对的 12 { 13 int d=0,i; 14 for(i=0;i<len2;i++) 15 { 16 d=d*c+b[i]-'0'; 17 } 18 return d; 19 } 20 void change2()//把十进制e转化成目标进制输出 21 { 22 int i; 23 for(i=0;i<10;i++) 24 { 25 if(e<c)break; 26 f[i]=e%c; 27 e/=c; 28 } 29 f[i]=e; 30 int len3=i+1; 31 for(i=len3-1;i>=0;i--) 32 { 33 if(i==len3-1&&f[i]==0&&len3!=1) 34 continue; 35 else 36 cout<<f[i]; 37 } 38 cout<<endl; 39 } 40 int main() 41 { 42 int i; 43 while(cin>>c&&c) 44 { 45 cin>>a>>b; 46 len1=strlen(a); 47 len2=strlen(b); 48 int d=change1(); 49 //cout<<d<<endl; 50 e=0; 51 for(i=0;i<len1;i++) 52 { 53 e=e*c+a[i]-'0'; 54 e=e%d; 55 } 56 //cout<<e<<endl; 57 change2(); 58 } 59 return 0; 60 }