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; }