【C语言】循环嵌套
循环嵌套
一、题目
求 s = a+aa+aaa+… …+aaa…a的值,其中a是一个数字,如2+22+222+2222,a的值和加数个数n,均从键盘获取。要求a属于[1,9],n小于10(如果不满足此条件,就重新输入)。
输入:输入a值和n值
输入提示信息:”Please input a:”
输入格式:”%d”
输入提示信息:”Please input n:”
输入格式:”%d”
输出:算式及和
输出提示信息:
“Sum=算式”,输出格式提示:采用 “Sum=”, “%ld”, “+%ld”
“Sum=和”,输出格式”\nSum=%ld\n”
程序运行示例:
Please input a:8
Please input n:9
Sum=8+88+888+8888+88888+888888+8888888+88888888+888888888
Sum=987654312
二、我写的代码
这是我的写的第一个双循环,总共花了我一个小时,中途没有借助豆包等大语言模型,仅仅使用了visual studio实现了代码的逐句执行
以下是我写的代码:
1 |
|
虽然很复杂,但总归是实现了题目中的要求。
三、自我反思
我所反思出来的:
- 优点
- “Sum=算式”这部分代码应该是最简,可读性也高
- 缺点
- “Sum=和” 这部分代码可读性低
- 被迫使用了pow函数,有没有更好的解决方法?
- p和each需要归位,我觉得有更好的解决方法
- 变量太多,可读性差
四、自我优化
优化个蛋,我什么都不懂,感觉改不了,直接甩给豆包吧!
五、求助豆包
你的代码存在几个问题,以下是具体分析和修改后的代码:
问题分析:
- 输入合法性校验缺失 :没有对输入的
a(需在 [1,9])和n(需小于 10)进行校验,不符合题目要求。 - 算式输出逻辑复杂且低效 :使用嵌套循环打印每一项,实际上可以通过迭代计算每一项的值并直接打印。
- 计算精度问题 :使用
pow(10, p-1)可能因浮点数精度误差导致计算错误,建议用整数迭代计算。 - 变量类型问题 :当
a=9且n=9时,和为 987654312,超过int类型的最大范围(2147483647 在某些环境下可能刚好,但为保险起见应使用long类型)。
修改后的代码:
1 |
|
关键改进:
- 增加输入校验 :使用
do-while循环确保a和n满足题目要求的范围。 - 简化算式输出 :通过
current = current * 10 + a迭代计算每一项(如 8→88→888),直接打印该值,避免嵌套循环。 - 避免精度问题 :用整数迭代替代
pow函数,确保计算准确。 - 使用长整数类型 :
long类型能容纳更大的计算结果,避免溢出。
程序运行示例与题目要求一致,且输入不合法时会重新提示输入。
六、自我改正
重新自己写了一份:
1 |
|
只是没有用豆包给的for循环,我用的while,确实简单很多了!!!
- 实现了每一项的叠加,这种每一项既可用于打印,也可用于求和
- 在循环中使用了if,将第一项的打印特殊化,避免另外说明
七、总结
- 先分析每一项与前一项的关系,是否可以通过方程迭代
- 尽量把每一项表示出来,会方便很多
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 王总的博客!




