高精度减法
题目描述:
高精度减法
输入格式:
两个整数a,b(第二个可能比第一个大)。
输出格式:
结果(是负数要输出负号)。
输入输出样例
输入#1 输出#1
2 1
1
说明/提示
20%数据a,b在long long范围内;
100%数据0<a,b<1010086。
题目需要注意的地方:
数据之间的大小问题
if ((num1.size() < num2.size()) || ((num1.size() == num2.size()) && (num1 < num2)))//比较大小 { len = num2.size(); swap(num1, num2);//交换两数 flag = 0;//标记 }
做减法时借位
c[i] += a[i] - b[i]; if (c[i] < 0) { c[i + 1] --; c[i] += 10; }
代码如下:
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int main() { int flag = 1; string num1, num2; cin >> num1 >> num2; int a[1050] = { 0 }, b[1050] = { 0 }, c[1050] = { 0 }; int len; if ((num1.size() < num2.size()) || ((num1.size() == num2.size()) && (num1 < num2)))//比较大小 { len = num2.size(); swap(num1, num2);//交换两数 flag = 0;//标记 } else len = num1.size(); //倒序存储 for (int i = 0;i < num1.size();i++)//将字符串转换为数字,并存储到数组中 { a[i] = num1[num1.size() - i - 1] - '0'; } for (int i = 0;i < num2.size();i++) { b[i] = num2[num2.size()-i-1] - '0'; } for (int i = 0;i < len;i++)//借位 { c[i] += a[i] - b[i]; if (c[i] < 0) { c[i + 1] --; c[i] += 10; } } for (int i = len - 1;i >= 0;i--)//注意倒序输出 { while (c[len-1] == 0&&i>0)//防止前面输出0 i--; if (flag == 0) { cout << '-'; flag = 1; } cout <<c[i]; } }

浙公网安备 33010602011771号