• 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;
    }
    
  • 相关阅读:
    云计算 备忘录
    python 备忘录
    Linux 备忘录
    appium自动化的一个实例
    appium环境的搭建
    四则运算2单元测试
    四则运算2
    四则运算2程序设计思路
    上课未及时完成的原因
    随机生成30道四则运算题程序设计
  • 原文地址:https://www.cnblogs.com/EdisonBa/p/14706135.html
Copyright © 2020-2023  润新知