博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
兔子数
阅读量:4946 次
发布时间:2019-06-11

本文共 1607 字,大约阅读时间需要 5 分钟。

题目描述

设 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
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);}

 

转载于:https://www.cnblogs.com/hrj1/p/11186099.html

你可能感兴趣的文章
异常实验
查看>>
python \r与\b的应用、光标的含义
查看>>
深拷贝 vs 浅拷贝 释放多次
查看>>
Java环境变量PATH和CLASSPATH
查看>>
ERROR:bokeh.core.validation.check:E-1001 (BAD_COLUMN_NAME) 就是补存在这个列名
查看>>
assert 的作用是什么?
查看>>
收藏夹(持续更新)
查看>>
iOS中的#import和class区别
查看>>
节约内存,请使用标签页管理工具:onetab、better onetab
查看>>
jQuery中的事件与动画
查看>>
页面加载骨架
查看>>
关于android系统不关屏设置
查看>>
SONY VPCS138EC降级安装XP
查看>>
[luogu4201][bzoj1063]设计路线【树形DP】
查看>>
手机抓包-手机劫持域名到指定服务器
查看>>
被放逐的皇后 金建云
查看>>
Javascript 有用参考函数
查看>>
点群的判别(三)
查看>>
gradle
查看>>
GNSS 使用DFT算法 能量损耗仿真
查看>>