https://vjudge.net/contest/275895#problem/G
做题的时候被自己的递归绕晕了,原来可以分割的每2个数相加再分割,这样子就能省去很多麻烦,实在是没有想到。简单意思就是比如777,我一开始的想法是,7+7+7=21,21最后再分割成1+2=3。最好的其实是7+7=14,分割成1,4,再用5+7=12,分割最后得到3.还有就是用字符数组来做数字输入会方便很多,得到的每一位最后再减去‘0’便可以得到整形数。还有就是运用for语句的终止可以是\0前的一位数,这样会方便很多。
#include <iostream>
using namespace std;
int main()
{
int s, i;
char n[2000];
while (cin>>n)
{
if (n[0] == '0')//遇到输入0就跳出结束循环
break;
s = 0;
for (i = 0; n[i]; i++)//终止条件是\0前一位
{
cout << n[i] << endl;
s = s + n[i] - '0';//分割每一个数
if (s >= 10)
s = s / 10 + s % 10;//每得到2个数字做相加大于10的话就做一次分割
}
cout << s << endl;
}
}