您当前的位置: 首页 > 

《信息学奥赛一本通》 高精度减法。输入两个正整数,求它们的差。

发布时间:2019-01-25 19:31:18 ,浏览量:0

算法分析

类似加法,可以用竖式求减法。在做减法运算是,需要注意的是:被减数必须大于减数,同时需要处理借位。

代码如下:

#include  #include  #include  using namespace std; int main () { int a[256],b[256],c[256],lena,lenb,lenc,i; char n[256],n1[256],n2[256]; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); gets(n1); gets(n2); //输入被减数和被减数 if(strlen(n1)<strlen(n2)||(strlen(n1)==strlen(n2)&&strcmp(n1,n2)<0)) { //strcmp()为字符串比较函数,当n1==n2时,返回0;当n1>n2时,返回正整数;当n1 //处理被减数和减数,交换被减数和减数 strcpy(n,n1); strcpy(n1,n2); strcpy(n2,n); cout<<"-"; //交换了减数和被减数,结果为负数。 } lena=strlen(n1); lenb=strlen(n2); for(i=0;i<=lena-1;i++) {//被减数放入a数组 a[lena-i]=int(n1[i]-'0'); } for(i=0;i<=lena-1;i++) {//减数放入b数组 b[lena-i]=int(n2[i]-'0'); } i=1; while(i<=lena||i<=lenb) { if(a[i]<b[i]) {//不够减,那么向高位借1当10 a[i]+=10; a[i+1]--; } c[i]=a[i]-b[i]; i++; } lenc=i; while((c[lenc]==0)&&(lenc>1)) {//最高位的0不输出 lenc--; } for(i=lenc;i>=1;i--) {//输出结果 cout<<c[i]; } cout<<endl; return 0; }             
关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    109966博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.2564s