树根 Digital root】的更多相关文章

数根 (又称数字根Digital root)是自然数的一种性质.换句话说.每一个自然数都有一个数根.数根是将一正整数的各个位数相加(即横向相加),若加完后的值大于等于10的话,则继续将各位数进行横向相加直到其值小于十为止,或是,将一数字反复做数字和,直到其值小于十为止,则所得的值为该数的数根. 比如54817的数根为7.由于5+4+8+1+7=25,25大于10则再加一次.2+5=7,7小于十.则7为54817的数根. 百度百科:http://baike.baidu.com/link? url=…
关于digital root可以参考维基百科,这里给出基本定义和性质. 一.定义 数字根(Digital Root)就是把一个数的各位数字相加,再将所得数的各位数字相加,直到所得数为一位数字为止.而这个一位数便是原来数字的数字根.适用范围为正整数和零.例如:65536,6+5+5+3+6=25,2+5=7,故数根为7. 二.性质 1. 任何数加减9的数字根还是它本身. 2. 9乘任何数字的数字根都是9. 3. 数字根的三则运算 (1). 两数之和的数字根等于这两个数的数字根的和数字根      …
来源:LeetCode 258  Add Dights Question:Given a non-negative integer  num , repeatedly add all its digits until the result has only one digit. For example: Given  num =  , the process is like:   + =  ,   + =  . Since    has only one digit, return it. Fo…
digital root = n==0 ? 0 : n%9==0 ? 9:n%9;可以简单证明一下n = a0*n^0 + a1*n^1 + ... + ak * n^kn%9 = a0+a1+..+ak然后,数学归纳易知结论是正确的.因此9个状态就够了,表示%9的结果.这里需要特殊处理0, 表示状态为0. /* 4351 */ #include <iostream> #include <sstream> #include <string> #include <m…
Sum of Digits / Digital Root In this kata, you must create a digital root function. A digital root is the recursive sum of all the digits in a number. Given n, take the sum of the digits of n. If that value has two digits, continue reducing in this w…
问题阐述会是这样的: Given a non-negative integer num, repeatedly add all its digits until the result has only one digit. For example: Given num = 38, the process is like: 3 + 8 = 11, 1 + 1 = 2. Since 2 has only one digit, return it. Follow up:Could you do it…
数字根(Digital Root)就是把一个自然数的各位数字相加,再将所得数的各位数字相加,直到所得数为一位数字为止.而这个一位数便是原来数字的数字根.例如: 198的数字根为9(1+9+8=18,1+8=9). 性质说明 任何数加9的数字根还是它本身 小学学加法的时候我们都明白,一个数字加9,就是把十位加1,个位减1.因此十位加个位的和是不变的:如果有进位,即十位上是9,那么进位之后十位会变成0,百位会加1,道理和一个一位数加9是一样的. 9乘任何数字的数字根都是9 同样是小学时学乘法时,我们…
118. Digital Root time limit per test: 0.25 sec. memory limit per test: 4096 KB Let f(n) be a sum of digits for positive integer n. If f(n) is one-digit number then it is a digital root for n and otherwise digital root of n is equal to digital root o…
C. Digital Root 题目连接: http://www.codeforces.com/contest/10/problem/C Description Not long ago Billy came across such a problem, where there were given three natural numbers A, B and C from the range [1, N], and it was asked to check whether the equat…
Digital Root Problem's Link Mean: 定义f(n)为n各位数字之和,如果n是各位数,则n个数根是f(n),否则为f(n)的数根. 现在给出n个Ai,求出A1*A2*…*AN + A1*A2*…*AN-1 + … + A1*A2 + A1 这个式子的数根. analyse: 这道题目要用到这个规律,设f(n)是n的digital root,那么f(A*N)=f(A*f(N)); 具体证明过程如下: 设自然数N=a[n]a[n-1]…a[0],其中a[0],a[1].……
题目传送门 /* 构造水题:对于0的多个位数的NO,对于位数太大的在后面补0,在9×k的范围内的平均的原则 */ #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> using namespace std; ; const int INF = 0x3f3f3f3f; int a[MAXN]; int main(void) //Codeforces Round #…
Instructions In this kata, you must create a digital root function. A digital root is the recursive sum of all the digits in a number. Given n, take the sum of the digits of n. If that value has more than one digit, continue reducing in this way unti…
背景 在LeetCode上遇到这道题:Add Digits 大意是给一个数,把它各位数字相加得到一个数,如果这个数小于10就返回,不然继续 addDigits(这个相加得到的数). 题目很简单,但是如果要用 O(1) 时间复杂度,不要涉及循环或递归来解答的话,我就不知道如何下手了. 于是我找了一下别人的解法,发现涉及到一个 Digital Root 的原理(由于维基百科打不开,所以我觉得有必要记录一下我搜集到的信息和理解). Digital Root 我是从这个网站上看到它的推导过程,但是为了防…
Not long ago Billy came across such a problem, where there were given three natural numbers A, B and C from the range [1, N], and it was asked to check whether the equation AB = C is correct. Recently Billy studied the concept of a digital root of a…
依然不是十分理解……待考虑…… #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #define lson l, m, rt << 1 #define rson m + 1, r, rt << 1 | 1 using namespace std; ; struct node { int num; int lnode, rnode;…
题目大意:有K组测试数据,然后每组有N个正整数,A1,A2,A3.....An,求出 A1 + A1*A2 + A1*A2*A3 + .......A1*A2*...An 的数根. 分析:有个对9取余的定理是可以直接求树根的,不过拿来玩大数运算也不错.ps.每位可以保存9位数,保存10位数会溢出. 高精度代码如下: ===========================================================================================…
时间限制:0.25s 空间限制:4M 题目大意 给出n个数,求n1+n1*n2+n1*n2*n3+n1...nn 的数根,数根是一个数各个位置数字和的树根,个位数的数根为它本身. 例如,f[987]=f[9+8+7=24]=f[2+4=6]=6; solution 对于不了解树根的,先看这样的证明 abc 是一个3位数, abc%9=(a*100)%9+(b*10)%9+c%9 =a%9+b%9+c%9 =(a+b+c)% 9 于是直接模拟,不断取模 参考代码 #include <stdio.h…
题意就是找出一个长度为k的整数,使得它的root为d,k的可能取值为1-1000. 第一眼看到这个题,无从下手,想到那么长的数,暴力肯定超时.其实不然,题目要求只要输出任何一个满足条件的即可,因为任何数的root都是0-9,所以这样的数还是很多的,算一下枚举次数的期望,大概就是5,不知道算的对不对. //cf 355A //2013-10-15-10.48 #include <stdio.h> #include <string.h> int num[1005]; int k, d;…
#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){char s[100000];int i,sum,num;while(scanf("%s",s)!=EOF&&s[0]!='0'){ sum=0;getchar();for(i=0;i<strlen(s);i++){sum+=(s[i]-'0');}num=sum%9;if (num == 0) //…
题目链接:http://codeforces.com/problemset/problem/355/A 题目意思:找出某个经过最多四次dr(n)操作等于d的k位数.   千万不要想得太复杂,想得越简单越好.由于它允许dr(n)的操作最多只能是四次,那么操作一次肯定是符合条件的.也就是经过一次dr(n)操作就能得出直接结果d的数(有k位). 由于这个数不能有前导0,非常简便的一个方法是,这个k位数是这样的:d000...00(0的个数等于k-1).要特别注意,什么时候应该输出“No solutio…
#include <iostream> using namespace std; int main(){ int k,d; cin >> k >>d; ) { k > ? (cout<<<<endl); } else{ cout<<d; ; i < k; ++ i) cout<<; cout<<endl; } }…
/* * c.cpp * * Created on: 2013-10-7 * Author: wangzhu */ /** * 当时比赛时,想得复杂了,也想偏了, * 1).写出来之后,结果达到了预期的结果,不过和给出的输出不一样,糊涂了 * 2).想法太复杂了 * * 比赛之后,看了别人的,原来如此: *结果不唯一, *当根为0,但位数大于1,则没有结果,因为位数大于1,最后的根必然大于0,故没有结果: *当不为0,则应是根后面跟位数减去一个零,即是结果. */ #include<cstdio…
乞讨A.B.C ∈[1.N] && A*B != C,d(A*B) == d(C)组的数量. 首先要知道d(x) = (x%9 == 0 ? 9 : x%9); 那么则会有A*B == C,则必有d(A*B) == d(C). 若不考虑A*B != C,则答案既是ans[x]*ans[y]*ans[d(x*y)],ans[x]为d(i) == x的个数,显然x∈[1,9]. 当考虑A*B != C时.则须要从ans[x]*ans[y]*ans[d(x*y)] - sum. sum = si…
主题链接:点击打开链接 #include<stdio.h> #include<iostream> #include<string.h> #include<set> #include<vector> #include<map> #include<math.h> #include<string> #include<stdlib.h> #include<algorithm> using nam…
数根就是不断地求这个数的各位数之和,直到求到个位数为止.所以数根一定和该数模9同余,但是数根又是大于零小于10的,所以数根模9的余数就是它本身,也就是说该数模9之后余数就是数根. 证明: 假设有一个n位的10进制数,我们写成,其中表示从低到高的每一位因为 那么 也就是一个数和它的各数位之和的模9相同.不如我们把这个操作记为f即也就是所以也就是说每做一次这样的操作,它对于9的模始终是不变的所以最终求出的数根和原数对9的模相同. 例子:(12345) % 9 = (1 + 2 + 3 + 4 + 5…
1. main()函数 C++程序从main()函数开始执行: int main() { /* ... code to execute ... */ } 按照约定,main函数应该返回0,除非程序遇到错误. 在C++中,使用cout来显示文本,同时使用cin接受输入. 由于技术原因,已经实现了一些函数用于输入. 库“simpio.h”包含用于读取输入的方法: int getInteger(string prompt = ""); double getReal(string prompt…
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4793    Accepted Submission(s): 2672 Problem Description The digital root of a positive integer is found by summing the digits of the integer. If…
我在网上看了一些大牛的题解,有些知识点不是太清楚, 因此再次整理了一下. 转载链接: http://blog.csdn.net/iamskying/article/details/4738838 http://www.2cto.com/kf/201405/297531.html 题目描述:求n^n次的digital root(数根),例如root(67)=6+7=root(13)=1+3=4; 一类解法: 求解思路:现在分析一个问题,假设将十位数为a,个位数为b的一个整数表示为ab,则推导得ab…
Background The digital root of a positive integer is found by summing the digits of the integer. If the resulting value is a single digit then that digit is the digital root. If the resulting value contains two or more digits, those digits are summed…
Digital Roots 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte总提交:456            测试通过:162 描述 The digital root of a positive integer is found by summing the digits of the integer. If the resulting value is a single digit then that digit is the d…