http://pat.zju.edu.cn/contests/pat-b-practise/1017
本想用减法模拟除法,求导商和余数。结果,测试时是严重超时。
如果数达到5位还可以,6位时就要算半天了!
#include<stdio.h>
#include<string.h>
int main(){
#ifdef ONLINE_JUDGE
#else
freopen("E:\\in.txt", "r", stdin);
// freopen("E:\\out.txt", "w", stdout);
#endif
char a[1010];
int b;
int q=0, r;
while(scanf("%s %d", a, &b) != EOF){
int len = strlen(a);
int i=len-1;//指向最后一个数字
int k=0;//指向开始的数字
while(len > 1){//a 长度多于1位时
printf("%s\n",a);
if(a[i]-'0' >= b){
a[i]-=b;
q++;
}else{
// 寻找借位
int j;
for(j=i-1;j>=k; j--){
if(a[j] > '0'){
a[j]--;
break;
}else
a[j]='9';
}//借位完成
if(a[k] == '0'){//借位到了开端
k++;
len--;
}
a[i] = a[i] + 10 - b;
q++;
}
}//while
while(a[i]-'0' >= b){
a[i]-=b;
q++;
}
r=a[i]-'0';
printf("%d\n", r);
}//while
return 0;
}