本文共 890 字,大约阅读时间需要 2 分钟。
开始的时候,比较被除数和除数的长度,然后把被除数转换为长度<=除数的整数.(这样可以避免除数很大时,被除数反复转换为10进制的过程) 然后模拟除法的手算过程.题目限定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; } 转载于:https://my.oschina.net/pandacub/blog/138365