答案:
#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
。