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
相关产品推荐
相关产品推荐

