C语言如何计算Sn=a+aa+aaa+aaaa+aaaaa的前5项之和?

更新于
2026-10-10 03:04:42
1阅读来源:SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计688个文字,预计阅读时间需要3分钟。

C语言如何计算Sn=a+aa+aaa+aaaa+aaaaa的前5项之和?

@TOC + 递归方法的解题思路:

1.分析问题,明确递归的基本情况。

2.将问题分解为更小的子问题,并定义递归关系。

3.设计递归函数,实现递归逻辑。

4.调用递归函数,输出结果。

完整代码:略

@TOC

递归方法的解题思路

完整代码:

C语言如何计算Sn=a+aa+aaa+aaaa+aaaaa的前5项之和?

#include <stdio.h> #include <math.h> int Sum(int num,static int i) { i++; if (num >= 100000) { return 0; } else { return num + Sum(num +(num % 10)*pow(10, i), i); } } int main() { int input = 0; printf("请输入需要计算的数:"); scanf("%d", &input); int ret = Sum(input, 0); printf("%d ", ret); return 0; }

递归的原理就是把大事化小事

假设a是5,那么我们就要把5 + 55 + 555 + 5555 + 55555 的和求出来。

我们把问题分解: 先把5算出来,然后加上函数递归把55 + 555 + 5555 + 55555算出来; 之后再把55算出来,然后加上函数递归把555 + 5555 + 55555算出来; 然后我们再把555算出来,然后加上函数递归把5555 +55555算出来; 图示如下:

递归的判断部分

递归处需要停止的判断条件,由于aaaaa<100000,所以停下递归的条件就是num >= 100000

if (num >= 100000) { return 0; } else { return 递归; }

递归的调节部分

首先,基本的形式肯定是不变的:return num + Sum(……);

现在问题就是Sum里面写什么才能使5-->55; 55-->555? 观察后我们可以发现, 55=5 + 5 % 10 * 10^1; 555 = 55 + 55 % 10 * 10 ^2; 所以得到通式:Sum(num + num%10 * pow(10 , i ), i)

所以得到以下函数:

int Sum(int num, int i) { i++; if (num >= 100000) { return 0; } else { return num + Sum(num +(num % 10)*pow(10, i), i); } }

再加上给函数输入参数以及打印部分 可以得到以下完整代码:

#include <stdio.h> #include <math.h> int Sum(int num, int i) { i++; if (num >= 100000) { return 0; } else { return num + Sum(num +(num % 10)*pow(10, i), i); } } int main() { int input = 0; printf("请输入需要计算的数:"); scanf("%d", &input); int ret = Sum(input, 0); printf("%d ", ret); return 0; }

(更多的方法将会在以后持续更新) 分享到这里就结束了,如果本文哪里有错误,还请大家指出,请在评论区留言; 如果觉得有用的话,还请给个免费的赞,灰常感谢捏!

标签:前

本文共计688个文字,预计阅读时间需要3分钟。

C语言如何计算Sn=a+aa+aaa+aaaa+aaaaa的前5项之和?

@TOC + 递归方法的解题思路:

1.分析问题,明确递归的基本情况。

2.将问题分解为更小的子问题,并定义递归关系。

3.设计递归函数,实现递归逻辑。

4.调用递归函数,输出结果。

完整代码:略

@TOC

递归方法的解题思路

完整代码:

C语言如何计算Sn=a+aa+aaa+aaaa+aaaaa的前5项之和?

#include <stdio.h> #include <math.h> int Sum(int num,static int i) { i++; if (num >= 100000) { return 0; } else { return num + Sum(num +(num % 10)*pow(10, i), i); } } int main() { int input = 0; printf("请输入需要计算的数:"); scanf("%d", &input); int ret = Sum(input, 0); printf("%d ", ret); return 0; }

递归的原理就是把大事化小事

假设a是5,那么我们就要把5 + 55 + 555 + 5555 + 55555 的和求出来。

我们把问题分解: 先把5算出来,然后加上函数递归把55 + 555 + 5555 + 55555算出来; 之后再把55算出来,然后加上函数递归把555 + 5555 + 55555算出来; 然后我们再把555算出来,然后加上函数递归把5555 +55555算出来; 图示如下:

递归的判断部分

递归处需要停止的判断条件,由于aaaaa<100000,所以停下递归的条件就是num >= 100000

if (num >= 100000) { return 0; } else { return 递归; }

递归的调节部分

首先,基本的形式肯定是不变的:return num + Sum(……);

现在问题就是Sum里面写什么才能使5-->55; 55-->555? 观察后我们可以发现, 55=5 + 5 % 10 * 10^1; 555 = 55 + 55 % 10 * 10 ^2; 所以得到通式:Sum(num + num%10 * pow(10 , i ), i)

所以得到以下函数:

int Sum(int num, int i) { i++; if (num >= 100000) { return 0; } else { return num + Sum(num +(num % 10)*pow(10, i), i); } }

再加上给函数输入参数以及打印部分 可以得到以下完整代码:

#include <stdio.h> #include <math.h> int Sum(int num, int i) { i++; if (num >= 100000) { return 0; } else { return num + Sum(num +(num % 10)*pow(10, i), i); } } int main() { int input = 0; printf("请输入需要计算的数:"); scanf("%d", &input); int ret = Sum(input, 0); printf("%d ", ret); return 0; }

(更多的方法将会在以后持续更新) 分享到这里就结束了,如果本文哪里有错误,还请大家指出,请在评论区留言; 如果觉得有用的话,还请给个免费的赞,灰常感谢捏!

标签:前