1. 程式人生 > >AT1753 ニコニコ數【題解】

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 )

輸出格式: 一行,一個正整數 A N S ANS 代表所有 N

N 以下的 n i w a n g o niwango 數的個數。(最後不要忘記換行!)

輸出格式:

N N 以下の正の整數のうち、約數にニコニコ數を持つものの個數を 1 1 行に出力せよ。 出力の最後に改行を忘れないこと。

輸入輸出樣例
輸入樣例#1:

42

輸出樣例#1:

1

輸入樣例#2:

20160123

輸出樣例#2:

806404

說明:

S a m p l e Sample E x p l a n a t i o n Explanation 1 1

42 42 以下的所有正整數中只有 25 25 n i w a n g o niwango 數。

題意:

所謂 n i c o n i c o niconico 數,就是用十進位制表示的,首位為 2 2 ,下一位則為 5 5 , 2 2 5 5 交替出現的數字。 例如, 25 25 , 2525 2525 , 25252525252525252525 25252525252525252525 , 之類就都是 n i c o n i c o niconico 數。而 467 467 , 5252 5252 , 5467 5467 則不是 n i c o n i c o niconico 數。

n i w a n g o niwango 數,就是因數含有 n i c o n i c o niconico 數的數。現在給定一個 N N ,求所有 N N 以下的(小於等於 N N 的) n i w a n g o 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;
}