codeforces 1157/problem/A

比较水的一道题
题意:
输入n
我们将1加上n,当结果数字中有尾随的零时,我们去掉这个零。例如,
F(599)=6:599+1=600→60→6;
F(7)=8:7+1=8;
F(9)=1:9+1=10→1;
F(10099)=101:10099+1=10100→1010→101。
您得到一个数字n;您的任务是计算从n可以到达多少个不同的数字。
例如:1098可以到达的值
1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,1098,1099

贴上代码

#include<bits/stdc++.h>
using namespace std;
int num;
map < int, int > vis;
void solve(int n){
    if (vis.find(n) != vis.end()) //在出现相同值的时候返回
        return ;
    vis[n] = 1, num++;
    int temp = n + 1;
    while(temp % 10 == 0){
        temp =	temp / 10;
    }
    solve(temp);
}
int main (){
    int n;
    cin >> n;
    solve(n);
    cout << num;
	
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43871956/article/details/89597357