用到了同余定理:(a+b)%c=(a%c+b%c)%c,
并在取余之前求各个位置的商;
题目:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1435
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int nmax=10000000;
char num1[nmax];
char num[nmax];
int main()
{
long long b;
char ope;
while(~scanf("%s %c %lld",num1,&ope,&b))
{ memset(num,0,sizeof(num));
int len=strlen(num1);
long long a=0,k=0;
for(int i=0;i<len;i++)
{
a=a*10+(num1[i]-'0');
num[k++]=a/b+'0';//取余前求商
a%=b;
}
if(ope=='%') cout<<a<<endl;
else
{
int i=0;
while(num[i]=='0') i++;
if(num[i]==0) i--;
for(;i<k;i++) cout<<num[i];
cout<<endl;
}
}
}