• [简单思维题]机智的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
    ",i); break;}
            }
            if(i>n) printf("Stupid SiriusRen
    ");
        }
        return 0;
    }
    转载请注明出处:https://www.cnblogs.com/lllxq/
  • 相关阅读:
    psacct监视用户执行的命令,如cpu时间和内存战胜,实时进程记账
    iostat,mpstat,sar即时查看工具,sar累计查看工具
    sysstat服务负载统计,如CPU占有率,网络使用率,磁盘速度
    linux top命令VIRT,RES,SHR,DATA的含义
    lsof查看进程打开了哪些文件目录套接字
    linux系统监控常用工具
    Linux系统维护修复模式
    centos单用户模式:修改ROOT密码和grub加密
    Linux系统启动过程介绍
    Android原生APP内分享
  • 原文地址:https://www.cnblogs.com/lllxq/p/9037891.html
Copyright © 2020-2023  润新知