求解释一行代码,该如何处理

求解释一行代码
题目是求数根,将一个数的每一位加起来,如果这个和是一个一位数,那么就是它的数根,若不是一位数,则对其和的每一位继续求和,直到这个和为一个一位数,
例如:23 -> 5
  78 -> 15 -> 6
  55555 -> 25 -> 7
有人写出了这么个算法,我数学很差劲,居然想不通原理是什么,求解释
Python code

s = 345435435435
while s > 9:
    s = s // 10 + s % 10
print(s)


 

------解决方案--------------------
其实要解这个题目,主要是从个位开始往上加。打个比方说:1234,先是4,然后是123+4=127;7就是3和4相加,依次类推,就有12+7=19,9=3+4+2;1+9=10,10=1+2+3+4;给出的程序中,s应该是int型的,s%10是取最后一位的数字
------解决方案--------------------
C/C++ code
#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++版本
C/C++ code

#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;
}

------解决方案--------------------
C/C++ code

#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,否则数根为所得余数,完毕