题目链接: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 }