会了加法,自然也要会减法,并不是把加号换成减号那么简单,还是要动一番脑筋的。
下面先写上我的代码:
#include<stdio.h>
#include<algorithm>
char num1[111], num2[111];
bool compare(char a[], char b[]){
int len1 = strlen(a);
int len2 = strlen(b);
int i, j;
if(len1 > len2)
return true;
else if(len1 == len2){
for(i = 0; i < len1; i++){
if(a[i] > b[i])
return true;
else if(a[i] < b[i])
return false;
}
return true;
}
else
return false;
}
void reverse(char a[]){
int i;
int len = strlen(a);
int temp;
for(i = 0; i < len/2; i++){
temp = a[i];
a[i] = a[len-1-i];
a[len-1-i] = temp;
}
}
void minus(char a[], char b[], char c[]){
int len1 = strlen(a);
int len2 = strlen(b);
int i, j;
int L = 0;
reverse(a);
reverse(b);
for(i = len2; i < len1; i++)//这一步很关键,初始化
b[i] = '0';
for(i = 0; i < len1; i++){
if(a[i] + L >= b[i]){
c[i] = a[i] + L - b[i] + '0';
L = 0;
}
else{
c[i] = (10 - (b[i] - '0')) + a[i] + L;
L = -1;
}
}
reverse(c);
}
using namespace std;
int main(){
int i, j;
while(scanf("%s%s",num1,num2) != EOF){
int len1 = strlen(num1);
int len2 = strlen(num2);
if(compare(num1,num2)){//这里也可以改成strcmp函数对特定情况进行讨论
minus(num1, num2, num2);
i = 0;
while(num2[i] == '0' && i < len1 - 1)//这一步是对应 "a - a = 0"这种情况
i++;
for( ; i < len1; i++)
printf("%c",num2[i]);
}
else{
printf("-");
minus(num2, num1, num1);
i = 0;
while(num1[i] == '0')//这一步是对应"a - b = c < 0, 且 c输出时会有多余的0"的情况,如-001
i++;
for( ; i < len2; i++)
printf("%c",num1[i]);
}
printf("\n");
}
return 0;
}
以上就是大数的减法。