然后模拟除法的手算过程.题目限定n<2147483648,但一般用long long,保证中间结果不出错.
#define maxn 1000+1
int main()
{
char num[maxn],sign[3];
long long n;
while(scanf("%s %s %lld",num,sign,&n)==3&&n>0)
{
if(num[0]=='0')
{
putchar('0');
putchar('\n');
continue;
}
unsigned int x=1+log10((double)n),len=strlen(num);
long long sum=0;
if(len<=x)
{
for(int i=0; i<len; i++)
sum=10*sum+(num[i]-'0');
}
else if(len>x)
{
for(int i=0; i<x; i++)
sum=10*sum+(num[i]-'0');
}
long long a=sum/n;
int X[maxn],k=0;
if(a!=0)///去除前导 0
{
X[k]=a;
sum%=n;
k++;
}
for(int i=x; i<len; i++)///必须从x开始
{
sum=sum*10+(num[i]-'0');
X[k]=sum/n;
sum%=n;
k++;
}///计算结果:存在X数组中的是除法结果,sum的值为求余结果.
switch(sign[0])
{
case '/':
for(int i=0; i<k; i++)
putchar(X[i]+'0');
break;
case '%':
printf("%lld",sum);
break;
}
putchar('\n');
}
return 0;
}