数根

数根(又称数字根Digital root)是自然数的一种性质,换句话说,每个自然数都有一个数根

数根是将一正整数的各个位数相加(即横向相加),若加完后的值大于等于10的话,则继续将各位数进行横向相加直到其值小于十为止,或是,将一数字重复做数字和,直到其值小于十为止,则所得的值为该数的数根。例如54817的数根为7,因为5+4+8+1+7=25,25大于10则再加一次,2+5=7,7小于十,则7为54817的数根。——百度百科

写代码验证:

最简单的方法:

递归一下子。

  	function DigitalRoot(num) {      
	    if(num < 10) {         
			return num;      
		} else {
            //把数字转换成字符串,把每一个数字都分割出来,存到数组里
			var nums = (num + '').split('');         
			var sum = 0;         
			for(var i = 0; i < nums.length; i++) {     
                //遍历取出每一个数字字符,转换成数字并求和
				sum += parseInt(nums[i]);         
			}         
			return DigitalRoot(sum);      
		}   
	}

用上算法:

    function DigitalRoot1(num){
        return (num-1)%9+1;
    }

解释:

ab写成: 10a+b=9a+a+b, 这和a+b相差9a,也就是9的倍数。如果大一点也是一样,abc写成:100a+10b+c=99a+9b+a+b+c,和a+b+c相差9的倍数99a+9b=9 (10a+b) 。所以abcde.. .把所有的位数相加结果就是9的倍数取余。另外先减一再加一的原因结果不会等于10,如果可以被9整除,直接取余就会是0,这样在计算过程中,先保证所有位数相加是取余是0-8,这样在结果+1时候,就会是1-9.不会出现0值。——知乎@caoglish

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章