2132 - [数值问题]高精度减法
时间限制 : 1 秒
内存限制 : 128 MB
高精度减法(highplus/c/cpp)
【问题描述】
输入两个高精度正整数a和b(a,b的位数<=200),求a-b的差
【输入格式】
<span>输入共两行,分别为a和b</span>
<span>【输出格式】</span>
<span>输出共一行,表示两个数的差,若a小于b,则先输出负号。</span>
<span>【输入样例1】 </span><span><br />
9999999999999999999999999999999999
<span style="font-family:'Microsoft Yahei';font-size:14px;line-height:21px;background-color:#F5F5F5;">1111111111111111111111111111111111</span>
<span>【输出样例1】</span>
8888888888888888888888888888888888
题目输入
题目输出
输入/输出样例
输入格式
输出格式
C++解答
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int main(){ int a[256],b[256],c[256],lena,lenb,lenc,i; char s[256],s1[256],s2[256]; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); gets(s1); gets(s2); if(strlen(s1)<strlen(s2)||(strlen(s1)==strlen(s2)&&strcmp(s1,s2)<0)){ strcpy(s,s1); strcpy(s1,s2); strcpy(s2,s); cout <<"-"; } lena=strlen(s1); lenb=strlen(s2); for(i=0;i<=lena-1;i++) a[lena-i]=s1[i]-48; for(i=0;i<=lenb-1;i++) b[lenb-i]=s2[i]-48; for(i=1;i<=lena;i++){ c[i]=a[i]-b[i]; if (c[i]<0){ c[i]+=10; c[i+1]--; } } lenc=lena+1; while (c[lenc]==0) lenc--; for(i=lenc;i>=1;i--) { cout<<c[i];} cout<<endl; return 0; }