题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1115
Hint: 本题的关键是减小第一轮求和的计算量。要把一个整数的各位分离出来,如果采用取余的方法分离各位,
如果数据量太大,肯定会超时。这里把整数当成字符串读入,然后读取每个字符,采用map进行键值映射,
就相当于将各位分离了,这种方法是比较省时的。
代码如下:
#include<iostream>
#include<fstream>
#include<vector>
#include<string>
#include<map>
#include<iterator>
#include<algorithm>
#include<sstream>
using namespace std;
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("D:\\in.txt", "r", stdin);
freopen("D:\\out.txt", "w", stdout);
#endif // ONLINE_JUDEG
map<char, int> m;
map<char, int>::iterator it;
m['0'] = 0;
m['1'] = 1;
m['2'] = 2;
m['3'] = 3;
m['4'] = 4;
m['5'] = 5;
m['6'] = 6;
m['7'] = 7;
m['8'] = 8;
m['9'] = 9;
string str;
string value;
int sum(0);
while (cin>>str)
{
sum = 0;
for (int i = 0; i < str.size(); i++)
{
it = m.find(str[i]);
sum += (*it).second;
}
while (true)
{
if (sum < 10)
{
cout << sum<<endl;
break;
}
else
{
sum = sum / 10 + sum % 10;
}
}
}
return 0;
}