Loading

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;
}
posted @ 2021-04-26 19:25  EdisonBa  阅读(55)  评论(0编辑  收藏  举报