C++实现将0-100内被x整除的数插入数组,现有代码求优化思路
问题分析与实现方案
现有代码的问题
- 不需要双重循环,两层循环会导致同一个符合条件的数值被重复赋值到多个数组位置,逻辑完全错误
- 赋值语句误写为
a[j] == i,==是比较运算符,不会完成赋值操作 - 参数
d是值传递,函数内部修改的d不会同步到主函数的原始变量,最终主函数打印时d还是初始值0,无任何输出 - 循环范围错误:你需要0到100之间的数,现有代码
i从1开始漏掉了0,i<100的判断又漏掉了100 - 未处理
x=0的异常场景,执行取模运算时会触发除以0错误
实现思路
思路1:遍历判断(最直观易写)
直接遍历0到100的所有整数,逐个判断是否能被x整除,符合条件就插入数组,同时计数。注意d要改成引用传递,才能把计数结果带回主函数,主函数调用逻辑无需修改。
正确代码示例:
// 第三个参数加&改成引用传递 void caricaArray(unsigned a[], unsigned x, unsigned &d) { if (x == 0) return; // 规避除以0错误 d = 0; // 初始化计数 for (int i = 0; i <= 100; i++) { if (i % x == 0) { a[d] = i; d++; } } }
思路2:直接生成倍数(效率更高,无需取模判断)
不需要逐个遍历所有数,直接生成x的倍数:从0开始,每次加x,直到数值超过100为止,每生成一个就存入数组即可。
代码示例:
void caricaArray(unsigned a[], unsigned x, unsigned &d) { if (x == 0) return; d = 0; for (int i = 0; i <= 100; i += x) { a[d] = i; d++; } }
内容的提问来源于stack exchange,提问作者aprilio
相关产品推荐
相关产品推荐

