高精度减法
实现步骤
- 判断输入的两个字符串大小,若第一个字符串字典序小于第二个字符串字典序,两者交换,我们要保证第一个字符串(作为被减数)要大于第二个字符串(减数)。
- 将字符串转换成整型数组,整型数组下标值从1开始。
- 数组一中的每个元素减去数组二中的每个元素,若数组一种的第i个元素小于数组二种的第i个元素,数组一第i个元素加10,数组一第i+1个元素减1。
- 判断数组尾部元素是否为0,若为0且数组长度大于1,数组长度减1.
代码实现
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
string str1,str2;
int a[250],b[250],c[250];
int len1,len2,len;
bool cmp(string s1,string s2){
return s1 > s2;
}
int main(){
cin >> str1 >> str2;
len1 = int(str1.size()), len2 = int(str2.size());
if(!cmp(str1,str2)){ //如果str1字典序小于str2字典序,交换str1和str2。
string temp = str1;
str1 = str2;
str2 = temp;
cout << "-";
}
len1 = int(str1.size()), len2 = int(str2.size());
for(int i = 0; i < len1; i ++){
a[len1-i] = str1[i]-'0';
}
for(int i = 0; i < len2; i ++){
b[len2-i] = str2[i] -'0';
}
len = 1;
while(len <= len1 || len <= len2){
if(a[len] < b[len]){
a[len] += 10;
a[len+1] -= 1;
}
c[len] = a[len] - b[len];
len ++;
}
while(c[len] == 0 && len>1){
len --;
}
for(int i = len; i >= 1; i --){
cout << c[i];
}
cout << endl;
}