Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 4713 | Accepted: 1997 |
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
Source
代码:
#include <iostream>
#include <cstdio>
#include <stdlib.h>
#include <string.h>
using namespace std;
void print(int r,int b)
{
if(r>0)
{
print(r/b,b);
printf("%d",r%b);
}
}
int main()
{
char p[1001],M[10];
int b,r;
int i,m;
for(;scanf("%d%s%s",&b,p,M);)
{
if(b==0)
break;
m=strtol(M,0,b);
r=0;
for(i=0;i<strlen(p);++i)
{
r=r*b+p[i]%48;
r%=m;
}
print(r,b);
puts(r?"":"0");
}
return 0;
}
#include <cstdio>
#include <stdlib.h>
#include <string.h>
using namespace std;
void print(int r,int b)
{
if(r>0)
{
print(r/b,b);
printf("%d",r%b);
}
}
int main()
{
char p[1001],M[10];
int b,r;
int i,m;
for(;scanf("%d%s%s",&b,p,M);)
{
if(b==0)
break;
m=strtol(M,0,b);
r=0;
for(i=0;i<strlen(p);++i)
{
r=r*b+p[i]%48;
r%=m;
}
print(r,b);
puts(r?"":"0");
}
return 0;
}