题目描述 Description
给出两个正整数A和B,计算A-B的值。保证A和B的位数不超过500位。
输入描述 Input Description
读入两个用空格隔开的正整数
输出描述 Output Description
输出A-B的值
样例输入 Sample Input
3 12
样例输出 Sample Output
-9
数据范围及提示 Data Size & Hint
两个正整数的位数不超过500位
这里在大数传入的时候我选择的是字符串接收,然后再将字符数组转化成整数数组,
并保证a数组大于b数组
#include<stdio.h>
#include<string.h>
int main(){
char c[505], d[505];
int sum[505], a[505], b[505];
memset(sum, 0, sizeof(sum));
/*gets_s(c);
gets_s(d);*/
scanf("%s%s", c, d);
int i, j,k, tmp, t,flag = 0;
if (strlen(c) > strlen(d) || strlen(c) == strlen(d) && strcmp(c, d) >= 0){
for (i = strlen(c) - 1, j = 0; i >= 0; i--, j++)
a[j] = c[i] - '0';
for (i = strlen(d) - 1, k = 0; i >= 0; i--, k++)
b[k] = d[i] - '0';
}
else{
flag = 1;
for (i = strlen(d) - 1, j = 0; i >= 0; i--, j++)
a[j] = d[i] - '0';
for (i = strlen(c) - 1, k = 0; i >= 0; i--, k++)
b[k] = c[i] - '0';
}
t = 0;
for (i = 0; i < k; i++){
tmp = a[i] - b[i] - t;
if (tmp < 0){
tmp += 10;
t = 1;
}
else
t = 0;
sum[i] = tmp;
}
while (i < j){
tmp = a[i] - t;
if (tmp < 0){
tmp += 10;
t = 1;
}
else
t = 0;
sum[i++] = tmp;
}
for (i = 501; sum[i] == 0; i--);
if (flag == 1)
printf("-");
while (i >= 0)
printf("%d", sum[i--]);
puts("");
return 0;
}