【题目描述】
求两个大的正整数相减的差。
【输入】
共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。
【输出】
一行,即所求的差。
【输入样例】
9999999999999999999999999999999999999
9999999999999【输出样例】
9999999999999999999999990000000000000
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int main()
{
char str1[256],str2[256],temp[256];
int a[256],b[256],c[256];
int lena,lenb,lenc;
int i;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
cin>>str1;//输入被减数
cin>>str2;//输入减数
lena=strlen(str1);
lenb=strlen(str2);
if( (lena<lenb) || (lena==lenb&&strcmp(str1,str2)) )//如果被减数小于减数,值为负,两者交换
{
strcpy(temp,str1);
strcpy(str1,str2);
strcpy(str2,temp);
cout<<"-";//输出-
}
lena=strlen(str1);
lenb=strlen(str2);
for(i=0;i<=lena-1;i++)//被减数str1存入数组a
a[lena-i]=str1[i]-'0';
for(i=0;i<=lenb-1;i++)//减数str2存入数组b
b[lenb-i]=str2[i]-'0';
i=1;
while(i<=lena||i<=lenb)
{
if(a[i]<b[i])
{
a[i]+=10;//借位
a[i+1]--;//上一位减1
}
c[i]=a[i]-b[i];//对应位相减
i++;
}
lenc=i;
while((c[lenc]==0)&&(lenc>1))//删除前导0
lenc--;
for(i=lenc;i>=1;i--)//倒序输出
cout<<c[i];
cout<<endl;
return 0;
}
信息学奥赛一本通T1169:高精度计算 大整数减法 归属于 高精度计算,更多同类题解源程序见:高精度计算 和 大整数减法
0 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!