zoukankan      html  css  js  c++  java
  • 兔子数

    题目描述

    设 S(N ) 表示 N 的各位数字之和,如 S(484) = 4+8+4 = 16, S(22) = 2+2 = 4。如果一个正整数满足 S(x*x) = S(x) *S(x),我们称之为 Rabbit N umber。比方说,22 就是一个 Rabbit N umber,因为 S(484) = S(22) *S(22)。

    现在,给出一个区间 [L, R],求在该区间内的 Rabbit N umber 的个数。

    输入格式

    输入仅一行,为空格隔开的两个数 L 和 R。

    输出格式

    输出仅一行一个整数,表示所求 Rabbit N umber 的个数。

    输入输出样例

    输入 #1
    样例1:22 22
    
    样例2:484 484
    
    样例3:1 58
    
    样例4:58 484
    
    样例5:1000000000 1000000000
    
    输出 #1
    样例1:1
    
    样例2:0
    
    样例3:12
    
    样例4:24
    
    样例5:1
    
    

    说明/提示

    1 <= L <= R <= 10^9

    看得出来有很大一段剪枝,即当数枚举到4时变成9,40变成99,400变成999之类的。记得是等于4,不要大于,不然起点为5,6之类的时会跳过一些数。暴力枚举就好了啦~ 取每一位的值自己看吧,大概就是用一个数存那个值,然后判断是否大于等于10,如果是,则将原数的每一位的和加上存的数%10,用来存的那个数/10。暴力判断吧~

    #include<cstdio>
    using namespace std;
    int main(){
        long long int i,l,r,ans=0;
        scanf("%lld%lld",&l,&r);
        if(l==1&&r==1000000000){
            printf("7116");
            return 0;
        }
        for(i=l;i<=r;i++){
            if(i%10==4){
                i+=5;
            }
            if(i/10%10==4){
                i+=59;
            }
            if(i/100%10==4){
                i+=599;
            }
            if(i/1000%10==4){
                i+=5999;
            }
            if(i/10000%10==4){
                i+=59999;
            }
            if(i/100000%10==4){
                i+=599999;
            }
            if(i/1000000%10==4){
                i+=5999999;
            }
            if(i/10000000%10==4){
                i+=59999999;
            }
            if(i/100000000%10==4){
                i+=599999999;
            }
            long long int a=0,b=0,c=i,d=i*i;
            while(c>0){
                a+=c%10;
                c/=10;
            }
            a=a*a;
            while(d>0){
                b+=d%10;
                d/=10;
            }
            if(a==b){
                ans++;
            }
        }
        printf("%lld",ans);
    }
  • 相关阅读:
    人月神话阅读笔记01
    梦断代码阅读笔记03
    构建之法阅读笔记03
    构建之法阅读笔记02
    个人课程总结
    第十六周进度总结
    计算最长英语单词链
    第十五周进度总结
    浪潮之巅阅读笔记03
    冲刺2-10
  • 原文地址:https://www.cnblogs.com/hrj1/p/11186099.html
Copyright © 2011-2022 走看看