解题思路:
直接减法模拟即可
注意事项:
记得考虑余数不输出和商不输出的情况,此时输出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 人评分
不会做的浏览:874 |
C语言程序设计教程(第三版)课后习题6.6 (C语言代码)浏览:624 |
淘淘的名单 (C语言代码)浏览:1103 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:840 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:588 |
出圈】指针malloc版浏览:355 |
陈教主的三角形 (C语言代码)浏览:1142 |
C语言训练-大、小写问题 (C语言代码)浏览:677 |
1052题解(链表操作)浏览:669 |
最好的,浏览:563 |