[简单思维题]机智的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

思路:这题本身没什么可讲的。。但是一直wa就很迷,发现把unsigned long long改成long long就对了?能用long long却不能用unsigned long long?
以后但凡数据本身不超过1e18并且运算过程中数据不超过1e18的就用long long,否则就用unsigned long long
 
AC代码:
#include <iostream>
#include<cstdio>
#include<algorithm>
typedef long long ll;
using namespace std;

int main()
{
    ll t;
    scanf("%lld",&t);
    while(t--){
        ll n;
        scanf("%lld",&n);
        ll tmp=n;
        ll len=0;
        while(tmp){
            len++;
            tmp/=10;
        }
        ll i;
        for(i=max((ll)0,n-9*len);i<=n;i++){
            ll sum=i;
            ll tmp=i;
            while(tmp){
                sum+=tmp%10;
                tmp/=10;
            }
            if(sum==n) {printf("%lld\n",i); break;}
        }
        if(i>n) printf("Stupid SiriusRen\n");
    }
    return 0;
}
posted @ 2018-05-14 20:07  l..q  阅读(324)  评论(0)    收藏  举报