HDOJ 1013 Digital Roots
题目
分类
模拟
数论 9余数定理
本来不想写这个的,看到有人用了9余数定理,自己没想到,还是写一下
题意
每行为 一个整数 求这个数的数根
题目定义 求树根过程
1. 数的各个位数相加
2. 若数 小于 1位 则该数为根 否则重复 1
技巧
9余数定理
每个数不为 0 所以 没有数的根会为0
而四位数 abcd % 9 和 (a+b+c+d)是同的的
以此类推
详细证明解答 点击 九余数定理(同余定理)
这篇文章不错 就不重复劳动了
代码(按题意模拟)
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
int sum;
string s;
stringstream ss;
while(cin >> s && s[0] != '0')
{
while(s.length() > 1)
{
sum = 0;
for(int i = 0;i < s.length();i++)
sum += s[i] - '0';
ss << sum;
ss >> s;
ss.clear();
}
cout << s << endl;
}
}
代码(9余数定理解法)
点此查看 9余数定理解法