东方博宜OJ 1245:求s=a+aa+aaa+aaaa+aa...a的值 ← “多个递归函数”写法

【题目来源】
https://oj.czos.cn/p/1245

【题目描述】
求 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 从键盘读入。
比如:读入 2,则 s=2+22=24。再比如:读入 5,s=5+55+555+5555+55555=61725。

【输入格式】
一个整数 a(a 在 1~9 的范围内)。

【输出格式】
整数 n,代表这个算式的结果。

【输入样例】
2

【输出样例】
24

【数据范围】
a 在 1~9 的范围内。

【算法分析】
● 在实践中,递归有“多个递归函数”写法,及“一个多参数递归函数”写法,以适应解决复杂问题的需求。
● 本题推荐使用“多个递归函数”写法,直观好理解。

【算法代码一:多个递归函数写法

#include <bits/stdc++.h>
using namespace std;

int num(int cnt,int x) {
    if(cnt==1) return x;
    return x+10*num(cnt-1,x);
}

long long sum(int cnt,int x) {
    if(cnt==1) return x;
    return sum(cnt-1,x)+num(cnt,x);
}

int main() {
    int n;
    cin>>n;
    cout<<sum(n,n);
    return 0;
}

/*
in:3
out:369
*/

【算法代码二:非递归写法

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n,t;
    cin>>n;
    t=n;
    long long sum=0;
    for(int i=1; i<=n; i++) {
        sum+=t;
        t=t*10+n;
    }
    cout<<sum;

    return 0;
}

/*
in:3
out:369
*/

【算法代码三:一个多参数递归函数写法

#include <bits/stdc++.h>
using namespace std;

long long f(int c,int n,int t) {
    if(c==0) return 0;
    return t+f(c-1,n,t*10+n);
}

int main() {
    int n;
    cin>>n;
    cout<<f(n,n,n);
    return 0;
}

/*
in:3
out:369
*/




【参考文献】
https://oj.czos.cn/p/1148
https://blog.csdn.net/weixin_42569562/article/details/81407543




 

posted @ 2025-12-23 11:51  Triwa  阅读(11)  评论(0)    收藏  举报