一本通1169 高精度减法

【题目描述】

求两个大的正整数相减的差。

【输入】

共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。

【输出】

一行,即所求的差。

【输入样例】

9999999999999999999999999999999999999
9999999999999

【输出样例】

9999999999999999999999990000000000000

代码

#include<iostream>
#include<cstdio>
#include<cmath> #include<cstring> #include<cstdlib> using namespace std; int main() { int a[256],b[256],c[256],lena,lenb,lenc,i; char a1[256],a2[256],n[256]; gets(a1); gets(a2); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); lena=strlen(a1); lenb=strlen(a2);//前面步骤和加法一样,不再赘述 if(lena<lenb||(lena==lenb&&strcmp(a1,a2)<0)) { strcpy(n,a1); strcpy(a1,a2); strcpy(a2,n); cout<<"-";这几行代码的意思就是,如果被减数小于减数,那么两个数的值交换,并且输出一个负号 } for(i=0;i<lena;i++) { a[lena-i]=a1[i]-48; } for(i=0;i<lenb;i++) { b[lenb-i]=a2[i]-48; }//字符变成数字 i=1; while(i<=lena||i<=lenb)//因为结果肯定小于其中的任意一个数,所以位数也要小于等于 { if(a[i]<b[i]) { a[i]+=10; a[i+1]--; }//如果对应的一位被减数比减数小,那么前面一位减1,本位加10,也就是借1当10 c[i]=a[i]-b[i]; i++; } lenc=i; while((c[lenc]==0)&&(lenc>1)) lenc--;//如果有后缀0,就删掉 for(i=lenc;i>=1;i--) cout<<c[i]; cout<<endl; return 0; }

猜你喜欢

转载自www.cnblogs.com/57xmz/p/12370768.html
今日推荐