O(∩_∩)O~,关于一道面试题的分析与解答

给大家分享一下我第一次参加面试时的一个题目:

问题:对于任意一个正整数 N,按以下操作把它转化为一个单一数字(大于 0 小于 10的数):

把 N 的各位上数字相加,若得到的结果不是一个单一数字,就把结果的各位上的数字相加,

若得到的结果还不是一个一位数,就还把结果的各位上的数字相加,

……

直到结果为一个单一数字为止。

如:2345

2+3+4+5=14

1+4=5 结果就为 5。

请写出一个方法,当传入任意一个正整数时,返回它按以上操作所得到的单一数字。



这个是刚才一个网友贴出来的,我也想了个方法,就是先把数字转换成string,然后再进行出来,总之就是转来转去吧,代码还是比较少的:

#include <iostream>
#include <string>
#include <strstream>
using namespace std;
string get_string(int N)
{
   strstream ss;
   string s;
   ss << N;
   ss >> s;
   return s;
}
int main()
{
	int N;
	cout << "please input the integral number N : ";
	cin >> N;
    do 
    {
		string s = get_string(N);
		int sum = 0;
		for (size_t i = 0; i < s.size(); ++i)
		{
			sum += s[i]-'0';
		}
		N = sum;
    } while (N >= 10);
    cout << N << endl;
    
}

posted @ 2011-03-08 10:14  hailong  阅读(336)  评论(3编辑  收藏  举报