解题思路:
直接减法模拟即可
注意事项:
记得考虑余数不输出和商不输出的情况,此时输出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.0分

3 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论