求解释一行代码
题目是求数根,将一个数的每一位加起来,如果这个和是一个一位数,那么就是它的数根,若不是一位数,则对其和的每一位继续求和,直到这个和为一个一位数,
例如:23 -> 5
78 -> 15 -> 6
55555 -> 25 -> 7
有人写出了这么个算法,我数学很差劲,居然想不通原理是什么,求解释
s = 345435435435while s > 9: s = s // 10 + s % 10print(s)
#include <stdio.h>int main(){ long unsigned int s = 345435435435; while (s > 9) s = s / 10 + s % 10; printf("%d\n",s); return 0;}
[解决办法]
不懂python
但是算法应用是一个数超过9就递归取余,然后对余数求和
[解决办法]
c++版本
#include <iostream>using namespace std;int main(){ unsigned int num; cout<<"Input an unsigned int num:"; cin>>num; while (num >= 10) { num = num / 10 + num % 10; } cout<<num<<endl; return 0;}
[解决办法]
#include <iostream>using namespace std;int main(){ unsigned int num; cout<<"Input an unsigned int num:"; cin>>num; while (num >= 10) { num = num / 10 + num % 10; } cout<<num<<endl; return 0;}//比如789:(700+80+9)/10 = 70 + 8 + 0;(700+80+9)%10 = 0 + 0 + 9;//(70 + 8 + 9)/10 = 7 + 0 + 0;(70 + 8 + 9)%10 =0 + 8 + 9;//此时num= 7 + 8 + 9;
[解决办法]
数学差劲的逐位相加
数学好点的直接对9求余
[解决办法]
小于等于9的数字,数根就是它本身,即当一个数小于等于9的时候,它的数根等于它对9求余
大于等于10的数字,使用数学归纳法,(a*10+b)=(a*9)+(a+b)
可见(a*10+b)和(a+b)对9求余的结果是相等的,若(a+b)小于等于9,则它就是所求数根,否则重复对9求余
对9求余结果为0,则数根为9,否则数根为所得余数,完毕