题目描述
高精度减法
输入输出格式
输入格式:两个整数a,b(第二个可能比第一个大)
输出格式:结果(是负数要输出负号)
输入输出样例
说明
20%数据a,b在long long范围内
100%数据0<a,b<=10的10000次方
思路:模拟计算 按位计算即可 开始先处理数据 比较大小 若先输入的数字小则输出‘-’并交换两项 统一处理
另外 string 类型 不支持直接比较数字大小 所以运用 string长度大的一定比长度小的值大 当长度相等时 可以直接用string进行比较
#include <bits/stdc++.h>
#include <memory.h>
#define N 10010
using namespace std;
int main()
{
string tmp_a,tmp_b;
cin >> tmp_a >> tmp_b;
if(tmp_a == tmp_b)
{
cout<<0;
return 0;
}
if(tmp_a.length() != tmp_b.length())
{
if(tmp_a.length() < tmp_b.length())//长度不等 则长度大的值也大 若tmp_a < tmp_b 则输出‘-’ 并交换
{
cout<<'-';
string tmp = tmp_a;
tmp_a = tmp_b;
tmp_b = tmp;
}
}
else//代表长度相等
{
if(tmp_a < tmp_b)//直接用string默认的比较方式
{
cout<<'-';
string tmp = tmp_a;
tmp_a = tmp_b;
tmp_b = tmp;
}
}
int a[N], b[N], c[N];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
for(int i = N-tmp_a.length(),j=0; i<N; i++)//转化
a[i] = tmp_a[j++] - '0';
for(int i = N-tmp_b.length(),j=0; i<N; i++)//转化
b[i] = tmp_b[j++] - '0';
for(int i = N-1; i>=N-tmp_a.length(); i--)//模拟计算
{
if(a[i] >= b[i])
c[i] = a[i]-b[i];
else
{
a[i-1]--;
c[i] = 10+a[i]-b[i];
}
}
int flag = 0;
for(int i = 0; i<N; i++)//输出
{
if(flag == 0 && c[i])
flag = 1;
if(flag)
cout<<c[i];
}
return 0;
}