代码的复杂性

Code complexity

本文关键字:复杂性 代码      更新时间:2023-10-16

谁能给我解释一下以下代码的时间复杂度:

cin >> n;
while(n>9)
{
    int num = n;
    int s = 0;
    while(num!=0)
    {
        s = s + num%10;
        num = num/10;
    }
    n = s;
}
cout<<n<<endl;

上面的代码计算数字的和,直到和变成一个个位数。

示例:45859 = 4+5+8+5+9 = 31 = 3+1 = 4

Edit:我认为计算数字和的内循环的复杂度为0(log_base_10(n)),但是外循环继续进行,直到到目前为止获得的和小于10。所以总复杂度取决于外部循环要运行多少次…我想不明白……一些计算外循环复杂性的数学技巧会有所帮助!!

你正在计算数字的和。n中的位数以log(n)进行缩放。