大整数减法

大整数减法算法
本文介绍了一种处理大整数减法的算法实现,能够处理长度达200位的整数。通过字符串处理和逐位计算的方式,实现了两个大整数之间的减法运算,并确保结果形式正确。

3180:整数减法
查看 提交 统计 提示 提问
时间限制: 1000ms 内存限制: 65536kB
描述
两个十进制非负整数M和N,计算二者的差,既M-N。
M、N最多可以是长度为200位的整数。
输入
多组数据,每组数据先是一行表示M,然后一行表示N。M和N开头均无冗余的0。
输出
每行一个数,表示M-N,开头不能有冗余的0,既不能输出05这样的数,而应该直接输出5。
样例输入
9999
4567
0
1
样例输出
5432
-1

 


#include<cstdio> #include<cstring> #include <string> #include <cstdlib> bool cmp1(char *a,char *b,int aa,int bb) { if(aa<bb) return 0; else if(aa>bb) return 1; else return strcmp(a,b)<0?0:1; } int main() { // freopen("in.txt","r",stdin); int i,j,n,k,lena,lenb;char a[201],b[201];int x[201],y[201]; while(~scanf("%s %s",a,b)) { if(strcmp(a,b)==0) {printf("0\n");continue;} lena=strlen(a); lenb=strlen(b); if(cmp1(a,b,lena,lenb)) { j=0; for(i=lena-1;i>=0;i--) x[j++]=a[i]-'0'; j=0; for(i=lenb-1;i>=0;i--) y[j++]=b[i]-'0'; for(i=0;i<lenb;i++) { x[i]-=y[i]; if(x[i]<0) {x[i]+=10;x[i+1]--;} } while(x[i]<0) { x[i]+=10;x[++i]-=1; } while(x[lena-1]==0) lena--; for(i=lena-1;i>=0;i--) printf("%d",x[i]); } else { printf("-"); j=0; for(i=lenb-1;i>=0;i--) x[j++]=b[i]-'0'; j=0; for(i=lena-1;i>=0;i--) y[j++]=a[i]-'0'; for(i=0;i<lena;i++) { x[i]-=y[i]; if(x[i]<0) {x[i]+=10;x[i+1]--;} } while(x[i]<0) { x[i]+=10;x[++i]-=1; } while(x[lenb-1]==0) lenb--; for(i=lenb-1;i>=0;i--) printf("%d",x[i]); } printf("\n"); } return 0; }

 

转载于:https://www.cnblogs.com/huashiyiqike/articles/2945135.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值