AT1753 ニコニコ数【题解】

题目背景

题目描述

ニコニコ数とは、 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 ) (1N109)

输出格式: 一行,一个正整数 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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值