CF1517A 题解
题目分析
观察 2050-number
:
\[2050,20500,205000,2050000,...
\]
我们发现后一个数是前一个数的 \(10\) 倍。
要判断一个数是否由若干个 2050-number
相加得到,我们可以首先判断这个数能不能整除 \(2050\),如果不能整除,那么它一定不符合条件。
我们令 \(t=n \div 2050\)。
接下来观察 \(24600\) 这个数:
\[24600=12×2050
\]
\[=10×2050+2×2050
\]
\[=1×20500+2×2050
\]
则最后的答案是 \(1+2=3\)。
通过观察,我们得出:最终的答案就是 \(t\) 的每一位之和。
代码
#include <iostream>
#include <cstdio>
#define ll long long
using namespace std;
int main()
{
ll T = read();
for (ll i = 1; i <= T; ++i){
ll n = read();
double t = (1.0 * n / 2050.0);
ll t_int = (ll)t; //判断能不能整除2050
if (t != t_int){
puts("-1");
continue;
}
ll ans = 0;
while (t_int){ //取t每一位的和并累加
ans += (t_int % 10);
t_int /= 10;
}
printf("%lld\n", ans); //输出答案
}
return 0;
}