HDOJ 1013 Digital Roots

题目地址:

http://acm.hdu.edu.cn/showproblem.php?pid=1013

这里要注意可能会是大数。所以简单的int性肯定不行。

懒的用char[],直接改用string.

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
 // Author: Tanky Woo
// HDOJ 1013
// Accepted 1013 0MS 268K 595B C++ Tanky Woo 
 
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
 
string num;
int sum;
string int2str(int &i)    //这里参考了以为神牛的
{
	string s;
	stringstream ss(s);
	ss << i;
	return ss.str();
}
 
int main()
{
	while(cin >> num && num != "0")
	{
		int len = num.size();
		while(len >= 2)
		{
			sum = 0;
			for(int i = 0; i < len; ++i)
				sum += num[i]- '0';
			num = int2str(sum);
			len = num.size();
		}
		cout << num << endl;
	}
	return 0;
}

上卖你的int2str()函数参考了:
http://www.cnblogs.com/oomusou/archive/2007/01/06/613413.html

方法二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 // Accepted 1013 0MS 264K 518 B
#include<iostream>
#include<string>
using namespace std;
int main()
{
        while(1)
        {
                char c;
                scanf("%c",&c);
                if(c=='0')break;
                int ans=0;
                ans+=c-'0';
                while(scanf("%c",&c))
                {
                        if(c=='\n')break;
                        ans+=c-'0';
                        if(ans>9)ans-=9;
                }
                cout<<ans<<endl;
        }
        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
 // 最后一个是大概半年前做的版本:
// Accepted 1013 0MS 248K 779 B C++ Tanky Woo 
// 那个时候不知道可以一组数据一组数据的输出结果,以为只能一回输出,呵呵
#include <iostream> 
#include <string> 
#include <vector> 
using namespace std; 
 
int main() 
{ 
	string num; //存数输入数据
	char str[100]; //用于将数字转换成字符串 
	vector<string> ivec; //保存最后结果 
	while(cin >> num && num != "0") 
	{ 
		int tmp; 
		while(num.size() > 1) //还可以继续求根 
		{ 
			tmp = 0; 
			for(string::size_type ix = 0; ix != num.size(); ix++) 
				tmp += (num[ix] - '0'); //把char型转换成int数字 
			itoa(tmp, str, 10); 
			num = str; 
		} 
		ivec.push_back(num); //把最后结果存入vector<string>中 
 
	} 
	for(vector<string>::iterator it = ivec.begin(); it != ivec.end(); it++) 
		cout << *it << endl; 
	return 0; 
}

发布者

Tanky Woo

Tanky Woo,[个人主页:https://tankywoo.com] / [新博客:https://blog.tankywoo.com]

发表评论

电子邮件地址不会被公开。 必填项已用*标注