我的添加大号码代码有什么问题?

问题描述

我搜索了我尝试过的所有内容,但找不到我需要的答案。

我正在用 C 语言解决一个名为“Big Number A+B”的问题。 A 和 B 的最大值是 10^10000,所以我无法用 unsigned long long 解决它,所以我尝试使用 char 数组添加它。

#include <stdio.h>

int main(void) {
    char tem1[10001],tem2[10001];
    char a[10001],b[10001],res[10002] = "";
    int carry = 0,sum = 0;

    scanf("%s%s",tem1,tem2);
    sprintf(a,"%010000s",tem1);
    sprintf(b,tem2);

    for (int i = 9999; i >= 0; i--) {
        sum = (a[i] - 48) + (b[i] - 48) + carry;
        carry = sum / 10;
        sum = sum % 10;
        res[i + 1] = sum + 48;
    }
    res[0] = carry + 48;

    int start = 0;

    while (res[start] == 48) {
        start++;
    }

    puts(res + start);
    return 0;
}

我声明了 5 个 char 数组,两个用于临时保存数字,两个用于添加数字,但我在前面放了零以使长度正好为 10000,最后为保存结果。

因为输入是单行的两个整数,所以我用 scanf 来读取它们。在 sprintf 中,我将长度设为 10000。然后在 for 循环中,我添加了 a[i]b[i]carry,以及 mod 10将字符保存到数组 res。跳出循环后,我将最后一个进位复制到 res[0]

实际添加完成,但结果前面可能有零,所以我找到了字符不是“0”的地方,并从那里打印出来。

我给这个程序添加了数字,一切正常。但是当我提交这段代码进行判断时,却显示超出输出限制,这是为什么呢?

如果我的英语不好,或者问题太愚蠢,我很抱歉。谢谢。

解决方法

填充说明符 %0 仅适用于数值,不适用于字符串。您可以按如下方式破解它:

sprintf(a,"%0*d%s",10000-(int)strlen(tem1),tem1);
sprintf(b,10000-(int)strlen(tem2),tem2);

printf("%*d",w,v) 是打印宽度为 vw

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...