一、题目
1169:大整数减法
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
求两个大的正整数相减的差。
【输入】
共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。
【输出】
一行,即所求的差。
【输入样例】
9999999999999999999999999999999999999 9999999999999
【输出样例】
9999999999999999999999990000000000000
二、思路
1.输入:定义string类型输入两个大数 普通int长度不够。
2.对齐:通过计算两个数字的长度差 把短的数字前面加0 补齐一样长。
3.类型转换:把string类型转换成int型。
4.减法计算:for循环倒着计算 定义一个x当做前一位 借位时候用。
5.输出:最后输出前需要判断前面是否有前缀0 把0删除后输出。
三、代码
#include<iostream>
using namespace std;
int main()
{
string a,b;
int la,lb,lc=0;
int a1[300],b1[300],c[300];
#输入
cin>>a>>b;
la=a.size();
lb=b.size();
#对齐
for(int i=0; i<la-lb; i++)
{
b="0"+b;
}
#类型转换
for(int i=0; i<la; i++)
{
a1[i]=a[i]-'0';
b1[i]=b[i]-'0';
}
#计算
int x=0;
for(int i=la-1; i>=0; i--)
{
c[lc]=a1[i]-b1[i]-x;
if(c[lc]<0)
{
x=1;
c[lc]+=10;
}
else
{
x=0;
}
lc++;
}
#输出 记得减一 因为上面最后多加了一
while(c[lc-1]==0)
{
lc--;
}
for(int i=lc-1; i>=0; i--)
{
cout<<c[i];
}
return 0;
}