本题有两种方法,不过貌似都要用字符串转换,可是题目明明说的int型。。。。
一、常用做法
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
string num;
int main()
{
while(cin>>num && num != "0")
{
int sum = 0;
for(int i = 0; i < num.size(); i++)
sum += num[i] - '0';
int n = sum;
while(1)
{
int tmp = n, sum = 0;
while(tmp)
{
sum += tmp % 10;
tmp /= 10;
}
if(0 <= sum && sum < 10)
{
cout<<sum<<endl;
break;
}
else n = sum;
}
}
}
二、最简单的做法
定理:一个正整数对9去模,如果取模值为0的话,digital root 就是 9,其他的就是直接取模就是digital root,
#include<stdio.h>
int main()
{
char ch;
while(1)
{
int sum = 0;
while(scanf("%c", &ch) && ch != '\n')
sum += ch-'0';
if(sum == 0) break;
if(sum%9 == 0) printf("9\n");
else printf("%d\n", sum%9);
}
return 0;
}