求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字

求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字

递归方法的解题思路

完整代码:

#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;
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CtrlZ大牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值