UPC-6020 机智的AmyZhi(暴力)

题目描述
那年一个雨季,AmyZhi在校门外弯身买参考书。
这时SiriusRen走过来,一言不合甩给她一道(自认为)很难的题
给你一个数字N,求一个最小的正整数M,这个数字M的各个位的数字加上它本身之和恰好为N。
没有想到AmyZhi秒解了这道题 并把N扩大到了10^18 甩回给了SiriusRen
SiriusRen苦苦思索,发现并不会这道题
可怜SiriusRen一世英名,在AmyZhi面前却宛如智障少年
SiriusRen抬头透过倾斜的雨丝,看向模糊的世界,车水马龙,穿流不息,人来人往,形色匆匆,刹那间惘然,竟不知去向何方……
输入
第一行一个整数T,表示有T组数据。
接下来T行每行一个整数N。
输出
对于每组数据,输出M。
若无解,输出“Stupid SiriusRen”
样例输入
3
216
121
2005
样例输出
198
Stupid SiriusRen
1979
提示
对于20%的数据 N<=1000,T<=1000
对于40%的数据 N<=100000,T<=5
对于60%的数据 N<=100000,T<=5000
对于100%的数据 N<=1018,T<=50000

问输入一个n,求一个最小的m使得m加上m的每一数位上的值结果等于n
因为最多加上的值不会超过当前位数*9,因此只用暴力遍历这段距离即可
最大的1e18也不过是18*9的遍历长度

#include<stdio.h>
#define LL long long
int main()
{
    int t;
    LL n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%lld",&n);
        LL tmp=n;
        int len=0;
        while(tmp)
        {
            tmp/=10;
            len++;
        }
        int sub=len*9;
        bool flag=false;
        for(LL i=n-sub;i<n;i++)
        {
            tmp=i;
            LL sum=0;
            while(tmp)
            {
                sum+=tmp%10;
                tmp/=10;
            }
//            printf("%lld -----> %lld
",i,sum+i);
            if(sum+i==n)
            {
                printf("%lld
",i);
                flag=true;
                break;
            }
        }
        if(!flag) printf("Stupid SiriusRen
");
    }
}
原文地址:https://www.cnblogs.com/kuronekonano/p/11135828.html