码蹄集 - MT2201 · 各位之和
Posted Tisfy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了码蹄集 - MT2201 · 各位之和相关的知识,希望对你有一定的参考价值。
传送门
各位之和
时间限制:1秒
空间限制:128M
题目描述
小码哥超厉害,可以把任意的数通过一次操作变成它的各个数位上的数字之和。
现在小码哥找来了一个数n,请问操作几次之后可以变成一个一位数。
输入描述
输入包含一个整数 n n n
数据范围
1 < = n < = 1 0 100000 1 <= n <= 10^100000 1<=n<=10100000
输出描述
输出一行一个数表示答案
样例一
输入
991
输出
3
题目分析
直接按照要求,进行模拟即可。
其实看到 1 0 100000 10^100000 10100000不用害怕,直接把输入的数字当作字符串来处理即可。
1 0 100000 10^100000 10100000也就是说输入的字符串的长度最大为 100000 100000 100000,而 100000 100000 100000个数求和最大不到 1 0 6 10^6 106(最多 6 6 6位)
因此很快就会收敛为一位数。完全不用担心时间问题。
字符串の各位和
字符串的各位和比较容易,直接遍历字符串,并累加每一位即可。
ll getS(string s)
ll ans = 0;
for (char& c : s)
ans += c - '0';
return ans;
数字の各位和
数字的各位和也不难。在数字不为零的时候,每次取出数字的个位数,然后让数字除以 10 10 10即可。
ll getS(ll n)
ll ans = 0;
while (n)
ans += n % 10;
n /= 10;
return ans;
AC代码
/*
* @Author: LetMeFly
* @Date: 2022-07-21 09:46:18
* @LastEditors: LetMeFly
* @LastEditTime: 2022-07-21 09:48:26
*/
#include <bits/stdc++.h>
using namespace std;
#define mem(a) memset(a, 0, sizeof(a))
#define dbg(x) cout << #x << " = " << x << endl
#define fi(i, l, r) for (int i = l; i < r; i++)
#define cd(a) scanf("%d", &a)
typedef long long ll;
ll getS(string s)
ll ans = 0;
for (char& c : s)
ans += c - '0';
return ans;
ll getS(ll n)
ll ans = 0;
while (n)
ans += n % 10;
n /= 10;
return ans;
int main()
string s;
cin >> s;
if (s.size() == 1)
puts("0");
return 0;
ll n = getS(s);
int ans = 1;
while (true)
if (n < 10)
break;
ans++;
n = getS(n);
cout << ans << endl;
return 0;
虽然代码可以复制,但最好还是自己理解后再敲哦
原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/125918169
以上是关于码蹄集 - MT2201 · 各位之和的主要内容,如果未能解决你的问题,请参考以下文章