大数减法
发布时间:2020-12-14 01:18:43 所属栏目:大数据 来源:网络整理
导读:实现输入两个超过整型范围的数之差 思路: ? ? ? ?输入的两个数要先比较大小,小数减大数当然要添负号。 ? ? ? ?比如100 - 9 ,第一步0 - 9,不够减,向高位借,十位上还是0,则10位变成9, ? ? ? ?再向高位借,百位上的1变0. 代码: #includeiostream#includ
实现输入两个超过整型范围的数之差 思路: ? ? ? ?输入的两个数要先比较大小,小数减大数当然要添负号。 ? ? ? ?比如100 - 9 ,第一步0 - 9,不够减,向高位借,十位上还是0,则10位变成9, ? ? ? ?再向高位借,百位上的1变0. 代码:
#include<iostream> #include<cstring> using namespace std; int main() { char a[231],b[231],c[231]; int lena,lenb,i,j,flag=0,k=0,x; scanf("%s%s",a,b); lena=strlen(a); lenb=strlen(b); for (i=0;i<lena;i++) a[i]=a[i]-48; for (i=0;i<lenb;i++) b[i]=b[i]-48;//全部转换为数字 if (lena>lenb) flag=1; else if (lena == lenb) { if (strcmp(a,b)>0) flag=1; }//flag为1,代表a大于b if (flag)//当a>b时 { for (i=lena-1,j=lenb-1;i>=0;i--,j--) { if (a[i]-b[j]<0&&j>=0) { x=i; a[x]=a[x]+10; while (a[--x]==0)//高位是0的情况 { a[x]=9; } a[x]=a[x]-1; //不是0的-1 } if (j<0) //当j<0是,则把a[i]的赋值到c数字中 c[k++]=a[i]; else c[k++]=a[i]-b[j]; } for (i=k-1;i>=0;i--)//去除前面多余的0 { if (c[i]!=0) break; } for (j=i;j>=0;j--) printf("%c",c[j]+'0'); } else//当a<b时 { for (i=lenb-1,j=lena-1;i>=0;i--,j--) { if (b[i]-a[j]<0&&j>=0) { x=i; b[x]=b[x]+10; while (b[--x]==0) { b[x]=9; } b[x]=b[x]-1; } if (j<0) c[k++]=b[i]; else c[k++]=b[i]-a[j]; } for (i=k-1;i>=0;i--) if (c[i]!=0) break; putchar('-'); for (j=i;j>=0;j--) printf("%c",c[j]+'0'); } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |