您的位置:首页 > 其它

HDU1013-Digital Roots-数论(树根)

2015-09-01 11:16 267 查看
题目链接: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: