第三周编程作业(巧算自然数 卖鸭子 输出各位数字之和)

这篇博客包含了三个C语言编程问题的解决方案:1) 输入自然数,通过偶数除2,奇数乘3加1的方法,找到变为1所需的步数和中间值。2) 使用递归函数解决卖鸭子问题,计算出发时的鸭子总数及每个村子卖出的鸭子数量。3) 利用递归函数计算输入数的各位数字之和。

1

巧算自然数(10分)

题目内容:

  编程实现输入一个自然数,若为偶数,则把它除以2;若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。输出经过多少次可以得到自然数1和每次得到的值。

输入格式:

  输入一个自然数

输出格式:

  输出经过多少次可以得到自然数1和每次得到的值

 

输入样例:

22[回车]

输出样例:

22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1[回车]

step=16[回车]

 

#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
int step=0;
while(n!=1){
    printf("%d",n);
    if(n%2!=0){
        n=n*3+1;
    }else
    n=n/2;
    if(n!=1)printf(",");
    else{
        printf(",1\n");
        step++;
   &nb

## 题目重述 输入一个任意大的自然数,计输出各位数字之和。例如:输入 `12345`,则输出 $1+2+3+4+5=15$。 --- ## 详解 要解决这个问题,关键是将一个大整数的每一位数字离出来并求和。由于Python中整数可以非常大(不受32位或64位限制),直接通过数学方法(如取余和整除)虽然可行,但更简洁的方式是将其转换为字符串后逐位处理。 ### 示例计: 设输入为 $ n = 987654321 $,则 各位数字之和为: $$ 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 = 45 $$ 我们可以通过以下步骤实现: 1. 接收用户输入(字符串形式); 2. 验证是否为自然数; 3. 遍历每个字符并转换为整数; 4. 累加得到总和。 --- ### Python代码实现: ```python # 输入一个自然数 try: num_str = input("请输入一个自然数:").strip() # 检查是否为空或非数字 if not num_str.isdigit(): raise ValueError("输入无效,请输入一个自然数!") # 计各位数字之和 digit_sum = sum(int(digit) for digit in num_str) print(f"输入数字是:{num_str}") print(f"各位数字之和为:{digit_sum}") except ValueError as e: print(f"错误:{e}") ``` --- ### 运行示例: ``` 请输入一个自然数:12345 输入数字是:12345 各位数字之和为:15 ``` 或更大的数: ``` 请输入一个自然数:9876543210123456789 输入数字是:9876543210123456789 各位数字之和为:90 ``` --- ## 知识点(列出解答该问题需要的知识点) 1. **字符串遍历与类型转换** 使用 `str` 遍历每一位字符,并用 `int()` 转换为数字进行计2. **内置函数 `sum()` 与生成器表达式** `sum(int(d) for d in str(n))` 可高效完成数字位求和。 3. **输入验证与异常处理** 使用 `.isdigit()` 判断输入合法性,防止非法输入导致程序崩溃。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值