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

如何在C语言中不使用常量且无需临时变量复用整数(Luhn算法场景)

解决Luhn算法中复用原输入整数的问题

你可以通过提前记录原数字的位数来避免依赖被修改为0的num,不需要额外存储整个原数,完全符合你的要求:

修改后的代码示例

// 先获取原数字的位数并保存,这时候num还没被修改
int originalDigitCount = countDigits(num);

while(num != 0)
{
    array[length] = (num % 10);
    num = num/10;
    length --;  
}

int secondArrayLength = 0;

// 直接用提前保存的originalDigitCount替代countDigits(num)
for( int secondlength = originalDigitCount - 1; secondlength > 0; secondlength = secondlength - 2)
{
    if (array[secondlength] > 0)
    {
        secondArrayLength ++;
    }
}

另一种无需提前调用countDigits的方式

如果不想在循环前调用countDigits,也可以在拆分数字的同时统计位数:

int digitCount = 0;
int tempLength = length; // 假设这里的length初始是足够大的数组索引

while(num != 0)
{
    array[tempLength] = (num % 10);
    num = num/10;
    tempLength --;
    digitCount++; // 每拆一位就统计一次
}

int secondArrayLength = 0;

for( int secondlength = digitCount - 1; secondlength > 0; secondlength -= 2)
{
    if (array[secondlength] > 0)
    {
        secondArrayLength ++;
    }
}

这两种方法都不需要存储整个原输入整数,只是记录了位数这个衍生值,完全满足你的限制条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 19:02:51