3449. 数字根
摘要
Title: 3449. 数字根
Tag: 数字根、数论
Memory Limit: 64 MB
Time Limit: 1000 ms
Powered by:NEFU AB-IN
3449. 数字根
-
题意
一个正整数的数字根是通过对该整数的各位数字求和得到的。
如果得到的结果是一个一位数字,则该这个数字就是所求的正整数的数字根。
如果得到的结果不止一位,则不断地对得到的中间结果进行各位数字求和,直到得到的最终结果为一位数字为止。
最终的得到的一位数字就是该正整数的数字根。
例如,对于整数 24,将 2 和 4 相加得到 6,而 6 是一位数字,所以 6 是 24 的数字根。
再考虑整数 39,将 3 和 9 相加得到 12,由于 12 不是一位数字,所以要继续对其进行各位数字求和,将 1 和 2 相加得到 3,3 是一位数字,所以 3 是 39 的数字根。 -
思路
两个性质
9 的倍数的性质:9 的倍数各个数位上的数字之和是 9 的倍数
任何一个整数模 9 同余于它的各数位上数字之和那么一直模9即可
-
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using namespace std;
int main(){
string s;
while(cin >> s, s != "0"){
int ans = 0;
for(int i = 0; i < s.size(); i++)
ans += s[i] - '0';
ans %= 9;
if(ans) printf("%d\n", ans);
else printf("9\n"); //如果是0特判,结果其实是9
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37/*
* @Author: NEFU AB-IN
* @Date: 2022-08-17 15:42:33
* @FilePath: \Acwing\3449\3449.cpp
* @LastEditTime: 2022-08-17 15:47:47
*/
using namespace std;
typedef pair<int, int> PII;
signed main()
{
IOS;
string n;
while (cin >> n, n != "0")
{
while (SZ(n) > 1)
{
int ans = 0;
for (auto i : n)
{
ans += i - '0';
}
n = to_string(ans);
}
cout << n << '\n';
}
return 0;
}