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

