/*输入两行字符串正整数,第一行是被减数,第二行是减数,输出第一行减去第二行的结果。
*/
#include <iostream>
#include <string.h>
using namespace std;
//char a[1001];
//char b[1001];
void bigPlus(char *a, char *b, bool flag)
{
// a = "123456" b= "43"
char result[1002];
int temp = 0;
int i,j,diff;
diff = strlen(a) - strlen(b);
for(i=strlen(a)-1,j=0; (i-diff)>=0; i--){
int s = (a[i]-'0')+(b[i-diff]-'0')+temp;
result[j++] =s%10+'0';
temp = s/10;
}
for(; i>=0; i--){
int s = a[i]-'0' + temp;
result[j++] =s%10+'0';
temp = s/10;
}
if(temp > 0)
result[j++] = temp+'0';
if(!flag) result[j++] = '-';
for(i=j-1; i>=0; i--)
cout<<result[i];
}
void bigMinus(char *a, char *b, bool flag)
{
char result[1002];
int alength = strlen(a);
int blength = strlen(b);
int temp = 0;
int i,j,diff,p;
diff = strlen(a) - strlen(b);
for(i=alength-1,j=0; (i-diff)>=0; i--){
int s = (a[i]-'0')- (b[i-diff]-'0');
if(s<0){
p = i-1;
while(a[p] == '0' && p>=0) p--;
a[p] = a[p]-'1'+'0';
p++;
while(p != i){
a[p] = '9';
p++;
}
s += 10;
}
result[j++] = s+'0';
}
for(; i>=0; i--){
if(i==0 && a[i]=='0') break;
else
result[j++] = a[i];
}
if(!flag){
while(result[j-1] == '0'){
result[j-1] = '\0';
j=j-1;
}
result[j++] = '-';
result[j] = '\0';
}else{
j--;
while(result[j] == '0'){
result[j] = '\0';
j--;
}
j++;
result[j] = '\0';
}
// cout<<strlen(result)<<endl;
// if(flag)
for(i=strlen(result)-1; i>=0; i--) cout<<result[i];
// else
// for(i=j-1; i>=0; i--) cout<<result[i];
cout<<endl;
}
void select(char *a, char *b)
{
int alength = strlen(a);
int blength = strlen(b);
if(alength > blength){
bigMinus(a,b,true);
}else if(alength == blength){
if(strcmp(a,b) == 1) bigMinus(a,b, true);
else if(strcmp(a,b) == 0) cout<<'0'<<endl;
else bigMinus(b,a, false);
}else{
bigMinus(b,a,false);
}
}
int main()
{
while(true){
char a[1001];
char b[1001];
cin >> a;
cin >> b;
int alength = strlen(a);
int blength = strlen(b);
bool flag = true;
if(a[0] != '-' && b[0] == '-'){//a-(-b)
if(alength >= (blength-1))
bigPlus(a,b+1, true);
else
bigPlus(b+1,a,true);
}else if(a[0] == '-' && b[0] != '-'){//-a-b
if((alength-1) >= blength)
bigPlus(a+1,b, false);
else
bigPlus(b,a+1, false);
}else if(a[0] != '-' && b[0] != '-'){//a-b
select(a,b);
}else{//-a-(-b)
select(b+1,a+1);
}
}
//cout<<a+1<<endl;
return 0;
}
大数减法
最新推荐文章于 2022-04-08 14:17:10 发布