题目:处理俩个高精度的减法。(1000位内)
输入:俩行,每行一个整数。(可能为负数,负号用“-”表示)
输出:一个整数,既两个数相减的结果。
#include <iostream>
#include <string>
using namespace std;
string st, str1,str2;
int a[1000],b[1000],c[1000];
void sub(string s1,string s2)
{
string s3;
int len1=0,len2=0;
for(int i=s1.size()-1;i>=0;i--)
a[++len1]=s1[i]-'0';
for(int i=s2.size()-1;i>=0;i--)
b[++len2]=s2[i]-'0';
for(int i=1;i<=len1;i++)
{
if(a[i]<b[i]) {a[i]+=10;a[i+1]--;}
c[i]=a[i]-b[i];
}
while(c[len1]==0&&len1>1) len1--;
for(int i=len1;i>=1;i--)
cout<<c[i];
}
void add(string s1,string s2)
{
int len1=0,len2=0,len;
for(int i=s1.size()-1;i>=0;i--)
a[++len1]=s1[i]-'0';
for(int i=s2.size()-1;i>=0;i--)
b[++len2]=s2[i]-'0';
len=max(len1,len2);
for(int i=1;i<=len;i++)
c[i]=a[i]+b[i];
for(int i=1;i<=len;i++)
{
c[i+1]=c[i+1]+c[i]/10;
c[i]%=10;
}
if(c[len+1]) len++;
for(int i=len;i>=1;i--) cout<<c[i];
}
int main()
{
getline(cin,str1); // 获取第一行输入
getline(cin,str2);
if (str1[0] != '-') // 如果第一个数是正数
{
if (str2[0] != '-'){ // 如果第二个数是正数
if (str1.size() > str2.size()) // 如果第一个数大于第二个数
{
sub(str1, str2);
} else if (str1.size() == str2.size()){ // 否则如果俩个长度数相等
if (str1 > str2) // 如果第一个数大于第二个数
sub(str1, str2);
else {
cout << "-";
sub(str2, str1);
}
} else { // 第二个数大于第一个数
cout <<"-"; sub(str2, str1);
}
} else{ // 第二个数为负数
str2.erase(0, 1);
add(str1, str2);
}
}
else // 第一个数为负数
{
if (str2[0] != '-'){ // 第二个数为正数
str1.erase(0, 1);
cout << "-";
add(str1, str2);
}else { // 第二个数为负数
str1.erase(0, 1);
str2.erase(0, 1);
if (str1.size() > str2.size()) // 第一个数的长度大于第二个数的长度
{
cout << "-";
sub(str1, str2);
} else if (str1.size() == str2.size()){ // 俩个数长度相等
if (str1 > str2){ // 第一个数大于第二个数
cout << "-";
sub(str1, str2);
}
else {
sub(str2, str1);
}
} else { // 第二个数大于第一个数
sub(str2, str1);
}
}
}
system("pause");
return 0;
}