解题思路:
直接减法模拟即可
注意事项:
记得考虑余数不输出和商不输出的情况,此时输出0
参考代码:
#include<stdio.h>
#include<string.h>
const int N=1e5+5;
char compare(int a[],int b[])//a1 b-1 a==b0
{ if(a[0]>b[0])return 1;
if(a[0]<b[0])return -1;
for(int i=a[0];i>0;i--)
{ if(a[i]>b[i])return 1;
if(b[i]>a[i])return -1;
}
return 0;
}
void copyarray(int p[],int q[],int m)
{ for(int i=1;i<=p[0];i++)q[i-1+m]=p[i];
q[0]=p[0]+m-1;
}
void subtraction(int a[],int b[])
{ int mark=compare(a,b),i;
if(!mark){a[0]=0;return;}
if(mark==1)//大于才减
{ for(i=1;i<=a[0];i++)
{ if(a[i]<b[i])a[i+1]--,a[i]+=10;
a[i]-=b[i];
}
while(a[0]>0&&a[a[0]]==0)a[0]--;
}
}
void division(int a[],int b[],int c[])
{ int i,temp[N];
c[0]=a[0]-b[0]+1;
for(i=c[0];i>=1;i--)
{ memset(temp,0,sizeof temp);
copyarray(b,temp,i);
while(compare(a,temp)>=0)
{ c[i]++;
subtraction(a,temp);
}
}
while(c[0]>0&&c[c[0]]==0)c[0]--;
}
main()
{ int a[N],b[N],result[N],i;
char temp1[N],temp2[N];
bool mark;
scanf("%s%s",temp1,temp2);
a[0]=strlen(temp1),b[0]=strlen(temp2);
for(i=1;i<=a[0];i++)a[i]=temp1[a[0]-i]-48;
for(i=1;i<=b[0];i++)b[i]=temp2[b[0]-i]-48;
division(a,b,result);
for(mark=1,i=result[0];i>0;i--)printf("%d",result[i]),mark=0;
if(mark)printf("0");
for(printf("\n"),i=a[0],mark=1;i>0;i--)printf("%d",a[i]),mark=0;
if(mark)printf("0");
}
0.0分
8 人评分
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:485 |
printf基础练习2 (C语言代码)浏览:690 |
2005年春浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:637 |
简单的a+b (C语言代码)浏览:878 |
罗列完美数 (C语言代码)浏览:519 |
一元一次方程 (C语言代码)浏览:4245 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:592 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:820 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:465 |
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:826 |