You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言按字符串指令运算时10位以上大数溢出如何解决

问题修复方案

错误原因

  • 输出格式符不匹配:变量c为long long类型,但代码中用%d(仅适用于32位int类型)输出。32位int最大可表示约21亿的正数,超过10位的数值会被截断,导致输出错误。
  • 次要不规范问题:scanf("%s", &string);写法有误,数组名本身就是首地址,无需额外加取地址符&;循环条件每次调用strlen计算字符串长度,会产生不必要的性能损耗。

修正后完整代码

#include <stdio.h>
#include <string.h>
int main(){
    char string[250];
    long long c = 1;
    scanf("%s", string);
    int str_len = strlen(string);
    for(int i = 0; i < str_len; i++){
        if(string[i] == 't' || string[i] == 'T'){
            c *= 3;
            i += 7;
            continue;
        }
        if(string[i] == 'd' || string[i] == 'D'){
            c *= 2;
            i += 4;
            continue;
        }
        if(string[i] == 'm' || string[i] == 'M'){
            c -= 1;
            i += 4;
            continue;
        }
    }
    printf("%lld", c);
    return 0;
}

调整说明

  1. 输出格式符替换为%lld,匹配long long类型的输出规则,支持最大9×10^18以内的数值输出,完全覆盖示例的13位结果需求。
  2. 修正scanf的参数写法,避免潜在内存访问隐患。
  3. 提前计算字符串长度存入变量,避免循环重复计算,提升运行效率。

使用你提供的输入测试,修改后代码可正常输出3645621927936。

内容的提问来源于stack exchange,提问作者hirbry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:15:00