题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1013
题意:
就是把数的每个位数相加,看是否小于10,是就输出,否则继续。
分析:
本题不难,让我们做了是为了让我们知道一个结论。一个数(n)的树根k=(n-1)%9-1;
知道这个这题就是水题了。
不知道也没什么关系,也可以水过。(输入的数可能很大)
数论代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
int main()
{
char s[1005];
while(scanf("%s",s)&&s[0]!='0'){
int n=0;
for(int i=0;i<strlen(s);i++) n+=s[i]-'0';
printf("%d\n",(n-1)%9+1);
}
return 0;
}
普通代码:
#include<stdio.h>
#include<string.h>
int root(int n)
{
int r=0;
while(n>0){
r+=n%10;
n/=10;
}
if(r>9) root(r);
else return r;
}
int main()
{
char st[1005];
int n,len;
while(scanf("%s",st)&&st[0]!='0')
{
n=0;
len=strlen(st);
for(int i=0;i<len;i++)
n+=st[i]-'0';
printf("%d\n",root(n));
}
return 0;
}
#include<stdio.h>
#include<string.h>
int root(int n)
{
int r=0;
while(n>0){
r+=n%10;
n/=10;
}
if(r>9) root(r);
else return r;
}
int main()
{
char st[1005];
int n,len;
while(scanf("%s",st)&&st[0]!='0')
{
n=0;
len=strlen(st);
for(int i=0;i<len;i++)
n+=st[i]-'0';
printf("%d\n",root(n));
}
return 0;
}