题目背景
无
题目描述
ニコニコ数とは、 10 10 進法で表記したときに 2 2 と 5 5 が交互にあらわれ、かつ一番上の位が 2 2 で一番下の位が 5 5 であるものです。 例えば、 25,\ 2525,\ 252525252525252525 25, 2525, 252525252525252525 などはニコニコ数であり、 467,\ 5252,\ 5 467, 5252, 5 などはニコニコ数ではありません。
ニワンゴくんは、 N N 以下の正の整数のうち、約数にニコニコ数を持つものがいくつあるかを調べようと思いました。ニワンゴくんに代わって、この問題を解くプログラムを作ってください。
输入输出格式
输入格式:
一行,一个正整数N ( 1 ≦ N ≦ 1 0 9 ) ( 1≦N≦10^9 ) (1≦N≦109)。
输出格式: 一行,一个正整数 A N S ANS ANS代表所有 N N N以下的 n i w a n g o niwango niwango数的个数。(最后不要忘记换行!)
输出格式:
N N N 以下の正の整数のうち、約数にニコニコ数を持つものの個数を 1 1 1 行に出力せよ。 出力の最後に改行を忘れないこと。
输入输出样例
输入样例#1:
42
输出样例#1:
1
输入样例#2:
20160123
输出样例#2:
806404
说明:
S a m p l e Sample Sample E x p l a n a t i o n Explanation Explanation 1 1 1:
42 42 42以下的所有正整数中只有 25 25 25是 n i w a n g o niwango niwango数。
题意:
所谓 n i c o n i c o niconico niconico数,就是用十进制表示的,首位为 2 2 2,下一位则为 5 5 5, 2 2 2与 5 5 5交替出现的数字。 例如, 25 25 25, 2525 2525 2525, 25252525252525252525 25252525252525252525 25252525252525252525, 之类就都是 n i c o n i c o niconico niconico数。而 467 467 467, 5252 5252 5252, 5467 5467 5467则不是 n i c o n i c o niconico niconico数。
而 n i w a n g o niwango niwango数,就是因数含有 n i c o n i c o niconico niconico数的数。现在给定一个 N N N,求所有 N N N以下的(小于等于 N N N的) n i w a n g o niwango niwango数的个数。
题解:
又是一道有难度的好(shui)题
题目比较长(虽然全是废话)个人认为这道题主要考你的语文阅读能力
其实不难理解,就是求小于给定的数中niconico数及其倍数的个数,因为所有的niconico数都是25的倍数
所以直接输出n/25的值就OK了
注意:一定要换行!
代码:
#include<iostream>//不解释
#include<cmath>
using namespace std;
long long n,ans;
int main(){
cin>>n;//输入
for(int i=1;i<=sqrt(n);i++)//循环找其因数,到sprt(n)是减少循环次数,优化
if(n%i==0)
{
ans=ans+i;//累加因数
ans=ans+n/i;//累加相对的因数
}
if(sqrt(double(n))==sqrt(n))//判断是否为完全平方数
ans-=sqrt(n);//如果是,就减去
//因为1也是完全平方数,不用另行判断
if(ans-n==n) cout<<"Perfect"<<endl;
else if(ans-n<n) cout<<"Deficient"<<endl;
else cout<<"Abundant"<<endl;
return 0;
}