1215787625 发表于 2023-11-1 08:40:38

小白求助

题目描述
求两个大的正整数相减的差。
输入
共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,b;
        int i,ten,len_a,len_b,result;
       
        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 = a - b < 0)
                       ten = 1;
                else ten = 0;
                if (ten == 1){
                        result -= '1';
                        result += '10';
                }
        }
       
        for (i = 0;i < len_a-len_b-1;i++){
                if (ten == 1)
                        if (result = a - 1 < '0')
                                        ten = 1;
                        else        result = a - 1;
        }
               
        for (i = 0;len_a-1-i >= 0;i++){
                result -= 48;
                if (result < 0){
                        result += 10;
                        result -= 1;
                }       
        }
       
        printf("%d",result);
       
        return 0;
}
为什么输出的不是理想值?

isdkz 发表于 2023-11-1 08:40:46

问题出在代码中的几个地方。首先,你使用了错误的数据类型来存储结果。result数组应该是一个字符数组,而不是整数数组。其次,在计算结果时,你没有考虑进位的情况。最后,你在输出结果时使用了错误的格式化字符。

下面是修改后的代码:

#include <stdio.h>
#include <string.h>
#define MAX 201

int main(void)
{
    char a,b, result;
    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 - b - ten;
      if (diff < 0) {
            diff += 10;
            ten = 1;
      } else {
            ten = 0;
      }
      result = diff + '0';
    }

    for (i = len_b; i < len_a; i++) {
      int diff = a - '0' - ten;
      if (diff < 0) {
            diff += 10;
            ten = 1;
      } else {
            ten = 0;
      }
      result = diff + '0';
    }

    result = '\0';

    printf("%s", result);

    return 0;
}


这个修改后的代码会正确计算两个大整数的差,并输出正确的结果。

Mike_python小 发表于 2023-11-1 08:42:23

问题分析:
你的代码存在一些问题,包括逻辑错误和输出格式错误。

1. 在计算差值时,你使用了=而不是==来比较大小。这会导致赋值操作而不是条件判断,结果不正确。
2. 在循环中的判断条件 len_b-1-i < 0 是错误的,应该是 len_b-1-i >= 0。
3. 在计算进位时,你没有正确处理进位的情况。在减法过程中,如果某一位的被减数小于减数,则需要向前一位借位,并且将当前位加上10。但你的代码中并没有正确执行这一步骤。
4. 最后,在输出结果时,你直接使用printf打印整型数组result,这样输出的是数组的地址而不是数值。

修改建议:
下面是修改后的代码,修正了上述问题:


#include <stdio.h>
#include <string.h>

#define MAX 201

int main(void) {
    char a, b;
    int i, ten = 0, len_a, len_b, result;

    scanf("%s", a);
    scanf("%s", b);

    len_a = strlen(a);
    len_b = strlen(b);

    for (i = 0; i < len_a; i++) {
      if (i < len_b)
            result = a - b - ten + '0';
      else
            result = a - '0' - ten;

      if (result < '0') {
            result += 10;
            ten = 1;
      } else {
            ten = 0;
      }
    }

    i = len_a - 1;
    while (i > 0 && result == '0')
      i--;

    // 输出差值
    for (; i >= 0; i--) {
      printf("%c", result);
    }

    return 0;
}


在修复逻辑错误后,代码将正确计算两个大正整数的差值,并按照要求输出结果。

希望能解决你的问题!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 小白求助