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

C语言实现Luhn算法时sum1、sum2始终为0的问题排查求助

问题原因与修正方案

1 核心错误:原始输入值被覆盖清零

你在计算输入数字长度的循环中,直接修改了input变量:

//Finds the length of the input
while (input > 0)
{
    input/=10;
    length++;
}

该循环执行结束后input的值已经变为0,后续for循环中你用已经是0的input计算各位数字,得到的所有位的值都是0,自然sum1、sum2始终为0。

修复方法

新增变量保存原始输入的副本,计算长度用副本即可:

long input;
do
{
    input = get_long("Number: ");
}
while (input < 0);
long input_copy = input; // 新增原始输入副本
// 计算长度只修改副本,不改动原始input
while (input_copy > 0)
{
    input_copy /=10;
    length++;
}

2 语法错误:输出语句括号位置错误

代码最后else分支的printf语句把分号写在了括号内侧,会直接导致编译失败:

printf("Invalid \n";)

修正为:

printf("Invalid \n");

3 逻辑错误:数字拆分逻辑有漏洞

当前判断是否需要拆分乘2后数字的条件是secondToLast * 2 > 10,会漏掉等于10的情况(例如5*2=10,也需要拆成1+0计算),且现有计算逻辑冗余容易出错。

修复方法

修改判断条件,简化求和逻辑:

int multi = secondToLast * 2;
if (multi >= 10)
{
    sum1 += (multi / 10) + (multi % 10);
}
else
{
    sum1 += multi;
}

4 潜在问题:pow函数精度风险

pow()是浮点运算函数,返回值为double类型,强制转换为long时可能出现精度丢失(比如pow(10,2)可能返回99.9999999999,转long后变成99),建议整数运算场景避免使用,可通过逐位取余的方法处理数字,稳定性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:24:00