|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目描述
求两个大的正整数相减的差。
输入
共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。
输出
一行,即所求的差。
样例输入 复制
9999999999999999999999999999999999999
9999999999999
样例输出 复制
9999999999999999999999990000000000000
#include <stdio.h>
#include <string.h>
#define MAX 201
int main(void)
{
char a[MAX],b[MAX];
int i,ten,len_a,len_b,result[MAX];
scanf("%s",a); scanf("%s",b);
len_a = strlen(a); len_b = strlen(b);
for (i = 0;len_b-1-i < 0;i++){
if (result[len_a-1-i] = a[len_a-1-i] - b[len_b-1-i] < 0)
ten = 1;
else ten = 0;
if (ten == 1){
result[len_a-2-i] -= '1';
result[len_a-1-i] += '10';
}
}
for (i = 0;i < len_a-len_b-1;i++){
if (ten == 1)
if (result[len_a-len_b-1] = a[len_a-len_b-1] - 1 < '0')
ten = 1;
else result[len_a-len_b-1] = a[len_a-len_b-1] - 1;
}
for (i = 0;len_a-1-i >= 0;i++){
result[len_a-1-i] -= 48;
if (result[len_a-1-i] < 0){
result[len_a-1-i] += 10;
result[len_a-1-i] -= 1;
}
}
printf("%d",result);
return 0;
}
为什么输出的不是理想值?
问题出在代码中的几个地方。首先,你使用了错误的数据类型来存储结果。result数组应该是一个字符数组,而不是整数数组。其次,在计算结果时,你没有考虑进位的情况。最后,你在输出结果时使用了错误的格式化字符。
下面是修改后的代码:
- #include <stdio.h>
- #include <string.h>
- #define MAX 201
- int main(void)
- {
- char a[MAX],b[MAX], result[MAX];
- int i, ten = 0, len_a, len_b;
- scanf("%s",a);
- scanf("%s",b);
- len_a = strlen(a);
- len_b = strlen(b);
- for (i = 0; i < len_b; i++) {
- int diff = a[len_a - 1 - i] - b[len_b - 1 - i] - ten;
- if (diff < 0) {
- diff += 10;
- ten = 1;
- } else {
- ten = 0;
- }
- result[len_a - 1 - i] = diff + '0';
- }
- for (i = len_b; i < len_a; i++) {
- int diff = a[len_a - 1 - i] - '0' - ten;
- if (diff < 0) {
- diff += 10;
- ten = 1;
- } else {
- ten = 0;
- }
- result[len_a - 1 - i] = diff + '0';
- }
- result[len_a] = '\0';
- printf("%s", result);
- return 0;
- }
复制代码
这个修改后的代码会正确计算两个大整数的差,并输出正确的结果。
|
|