Skip to content

Latest commit

 

History

History
58 lines (44 loc) · 1.8 KB

2764.md

File metadata and controls

58 lines (44 loc) · 1.8 KB

数根 2764: 数根

题目要求计算给定数的各位数字的累加和,直到剩一位数。

题目来源

2764: 数根

总时间限制: 1000ms 内存限制: 65536kB

描述

数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根。如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。

比如,对于24来说,把2和4相加得到6,由于6是一位数,因此6是24的数根。再比如39,把3和9加起来得到12,由于12不是一位数,因此还得把1和2加起来,最后得到3,这是一个一位数,因此3是39的数根。

输入

一个正整数(小于10^1000)。

输出

一个数字,即输入数字的数根。

样例输入

24

样例输出

6

我们可以在循环起始判断当前数的位数,如果多于1位,就将全部数字累加起来知道剩余1位输出。

#include <iostream>
#include <string>
using namespace std;
int main() {
	string str;
	cin >> str;
	while (str.length() > 1) {
		int i, sum = 0;
		for (i = 0; i < str.length(); ++i) {
			sum += str[i] - '0';
		}
		char cstr[10];
		sprintf(cstr, "%d", sum);
		str = string(cstr);
	}
	cout << str << endl;
	return 0;
}

2764.cpp 代码长度:316B 内存:200kB 时间:14ms 通过率:84% 最小内存:200kB 最短时间:0ms

考虑到数字很大,long long型也无法容纳,且不利于计算累加和,建议用字符串string类型或者char数组,并且在计算的过程中始终以字符串类型保存结果。

有任何的改进意见欢迎大家在微信平台公众号主页面留言或者发表issue。