牛客新生赛 E.蕊蕊识数(数学)(题解auto、to_string)

好久不见. 提交于 2019-12-10 02:32:50

题目链接:点击这里
在这里插入图片描述

注意到对于任意的 10k(k0)10^k (k \ge 0 且为整数),其被3除的余数都是1,因此 a10ka\cdot 10^kaa 对3同余。

任何十进制非负整数都可以表示成 ai10k\sum{a_i\cdot 10^k} 的多项式形式,其中 aia_i 恰好是该十进制数的各个数位。

因此任意十进制非负整数被3除的余数,都等于将它的各个十进制位的数相加后被3除的余数。换而言之,3满足所有情况的 mm,而比3小的可能的答案只有2。

所以只需要判断一下2是否是答案,如果不是输出3即可。

题解如下:

#include <bits/stdc++.h>
using namespace std;
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
 
	int T;
	cin >> T;
	int maxx = 0;
	while (T--)
	{
		string str;
		cin >> str;
		int num = 0;
		for (auto &i : str)
			num += i - '0';
		int check = (str.back() - '0') % 2;
		bool flag = true;
		while (num >= 10)
		{
			if (num % 2 != check)
			{
				flag = false;
				break;
			}
			str = to_string(num);
			num = 0;
			for (auto &i : str)
				num += i - '0';
		}
		if (flag && num % 2 == check)
		  cout << 2 << endl;
		else
		  cout << 3 << endl;
	}
	return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!