3115 高精度练习之减法
时间限制: 1 s
空间限制: 64000 KB
题目等级 : 黄金 Gold
题目描述 Description
给出两个正整数A和B,计算A-B的值。保证A和B的位数不超过500位。
输入描述 Input Description
读入两个用空格隔开的正整数
输出描述 Output Description
输出A-B的值
样例输入 Sample Input
3 12
样例输出 Sample Output
-9
数据范围及提示 Data Size & Hint
两个正整数的位数不超过500位
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int main() { int a[501],b[501],c[501],lena,lenb,lenc,i; char n[501],n1[501],n2[501]; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); cin>>n1; cin>>n2; if(strlen(n1)<strlen(n2)||(strlen(n1)==strlen(n2)&&strcmp(n1,n2)<0)) //strcmp()为字符串比较函数,当n1==n2,返回0; //n1>n2时,返回正整数;n1<n2时,返回负整数 { //处理被减数和减数,交换被减数和减数 strcpy(n,n1); //将n1数组的值完全赋值给n数组 strcpy(n1,n2); strcpy(n2,n); cout<<"-"; } lena=strlen(n1); lenb=strlen(n2); for(i=0; i<lena; i++) a[lena-i]=int(n1[i]-'0'); for(i=0; i<lenb; i++) b[lenb-i]=int(n2[i]-'0'); i=1; while(i<=lena||i<=lenb) { if(a[i]<b[i]) { a[i]+=10; a[i+1]--; } c[i]=a[i]-b[i]; i++; } lenc=i; while((c[lenc]==0)&&(lenc>1)) lenc--; for(int i=lenc; i>=1; i--) cout<<c[i]; cout<<endl; return 0; }