这道题看起来很容易,但是有一个陷阱:一个正整数可能超出int的范围。所以读取输入数据的时候用int型来保存就错了,我使用String来保存输入,当然也可以使用char[]。而且第一次将各个位置的数相加之后,所得的数就肯定在int的范围内了。 #include <iostream> #include <string> using namespace std; int i, mRlt; string input; //保存输入正整数 void init(){ mRlt = 0; int temp = input.size(); for (i = 0; i < temp; ++i) mRlt += input[i] - '0'; //将各个位上的数相加 } void work(){ int temp; while(mRlt >= 10){ //将mRlt进行模运算直到 <10 temp = mRlt; mRlt = 0; do { mRlt += temp%10; temp /= 10; } while(temp != 0); } } int main(){ while(1){ mRlt = 0; cin >> input; if (input == "0") break; init(); //接收输入 work(); //计算结果 cout << mRlt << endl; } return 0; }