答案:
#include<bits/stdc++.h>
using namespace std;
const int N=10e7;
int fx(int n)
{int sum=0;while(n){sum+=(n%10);n/=10;}return sum;
}
int main()
{int t,n,x;cin>>t;while(t--){cin>>n;int count=0;for(int i=1;i<N;){if(i==n){cout<<count<<'\n';break;}else if(i>n){cout<<-1<<'\n';break;}x=fx(i);i=(i+x);count++;}
}return 0;
}
代码的逻辑:
- 函数
fx计算一个整数n的各位数字之和。 - 主函数中首先读取测试案例数量
t,然后对于每个测试案例,读取目标值n。 - 代码使用一个
for循环从i = 1开始,逐步计算下一个值i,直到i等于或大于n。
假设 n = 5,代码的执行过程如下:
t = 1(一个测试案例)n = 5(目标值)- 初始化
count = 0,i = 1
进入 for 循环:
-
第一轮循环:
i = 1- 计算
x = fx(1) = 1 - 更新
i = i + x = 1 + 1 = 2 count++(count = 1)
-
第二轮循环:
i = 2- 计算
x = fx(2) = 2 - 更新
i = i + x = 2 + 2 = 4 count++(count = 2)
-
第三轮循环:
i = 4- 计算
x = fx(4) = 4 - 更新
i = i + x = 4 + 4 = 8 count++(count = 3)
-
第四轮循环:
i = 8- 这时
i > n,所以输出-1,并退出循环。
因此,对于 n = 5,程序将输出 -1。
我们再通过另一个例子 n = 10 来分析:
t = 1(一个测试案例)n = 10(目标值)- 初始化
count = 0,i = 1
进入 for 循环:
-
第一轮循环:
i = 1- 计算
x = fx(1) = 1 - 更新
i = i + x = 1 + 1 = 2 count++(count = 1)
-
第二轮循环:
i = 2- 计算
x = fx(2) = 2 - 更新
i = i + x = 2 + 2 = 4 count++(count = 2)
-
第三轮循环:
i = 4- 计算
x = fx(4) = 4 - 更新
i = i + x = 4 + 4 = 8 count++(count = 3)
-
第四轮循环:
i = 8- 计算
x = fx(8) = 8 - 更新
i = i + x = 8 + 8 = 16 count++(count = 4)
-
第五轮循环:
i = 16- 这时
i > n,所以输出-1,并退出循环。
对于 n = 10,程序同样输出 -1。