读书人

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

发布时间: 2012-04-17 15:06:33 作者: rapoo

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

Python code
s = 345435435435while s > 9:    s = s // 10 + s % 10print(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,否则数根为所得余数,完毕

读书人网 >C++

热点推荐