多种方法求1+12+123+1234……

有网友出了一道题:

从键盘输入一个小于10的正整数n,计算1+12+123+1234......,即前n项之和。

第一眼看到题目,直觉告诉我必须使用嵌套的两个for循环,里面的循环生成每一项,外面的循环求和。错误的方向和思路让我白白浪费了三个小时都没有调试出来,大受打击,最后不得已向AI求助。

(1)sider生成的代码如下:

python 复制代码
n = int(input("请输入一个小于10的正整数:"))
result = 0
number = 0
for i in range(1, n + 1):
    number = 10 * number + i
    print(number)
    result += number
print(f'求和结果是{result}')

这段代码使用了双变量(result和number)、一个for循环求解,比我最开始想到的嵌套循环简单了很多。number = 10 * number + i是核心语句,是最关键的部分。程序其他地方就没有技术含量了,结果如下:

有了如此简单的答案,心态产生了微妙的变化。我反复安慰、鼓励自己:你行的!于是,想挑战使用其他方法来求解。首先想到的是递归方法求解,代码如下:

(2)递归的方法:

python 复制代码
n = int(input("请输入一个小于10的正整数:"))
def f(n):
    if n == 1:
        return 1
    else:
        return 10 * f(n-1) + n   
list_created = [f(i) for i in range(1, n+1)]
print(list_created)
print(sum(list_created))

除了递归,第二种方法还涉及列表解析式和sum()函数的用法。运行得到正确答案。

第三种方法我认为很巧妙,运用了字符串、变量转换、for循环、切片等知识,代码如下:

(3)字符串的方法:

python 复制代码
n = int(input("请输入一个小于10的正整数:"))
s = "123456789"
result = 0 
for i in range(1, n+1):
    s_temp = s[:i]
    value = int(s_temp)
    print(value)
    result += value
print(result)

当然,条条大路通罗马,读者若有更多方法,欢迎在下面留言分享。

相关推荐
水木流年追梦13 分钟前
大模型入门-大模型优化方法13- MTP 多 token 输出、DCA 双块注意力
人工智能·分布式·算法·正则表达式·prompt
数据皮皮侠18 分钟前
全国消协智慧 315 平台投诉信息数据库
大数据·人工智能·算法·百度·制造
清水白石00824 分钟前
从打印对象到高质量调试:彻底理解 Python 中 `__repr__` 和 `__str__` 的区别
开发语言·python
8Qi827 分钟前
LeetCode 115 & 392:不同子序列 / 判断子序列
算法·leetcode·职场和发展·动态规划
Sammyyyyy36 分钟前
Google I/O 2026 Antigravity 更新解析与 SDK 实战指南
python·ai编程·servbay
小蒋学算法1 小时前
算法-乘法表中第K小的数-二分
数据结构·算法
智者知已应修善业1 小时前
【51单片机8个LED,已经使用了D1D2,怎么样在不动D1D2的前提下实现D6~D8的流水灯】2024-1-19
c++·经验分享·笔记·算法·51单片机
Evand J1 小时前
【MATLAB例程】自适应渐消扩展卡尔曼滤波(AFEKF)三维雷达目标跟踪|效果已调优,附下载链接和运行结果,代码直接运行即可
开发语言·算法·matlab·目标跟踪·卡尔曼滤波·自适应滤波·代码定制
嫂子的姐夫1 小时前
047-MD5:飞卢网
爬虫·python·js逆向·逆向
DXM05211 小时前
第8期| 传统机器学习遥感解译:SVM & 随机森林分类全流程实操
人工智能·python·随机森林·机器学习·支持向量机·arcgis·自然语言处理