#21372: C++寫法


36563120 (雨)

學校 : 國立彰化師範大學
編號 : 121990
來源 : [120.107.188.16]
最後登入時間 :
2020-06-26 03:42:56
a040. 阿姆斯壯數 | From: [120.107.188.16] | 發表日期 : 2020-05-24 06:03

這寫法省時間但冗長

先判斷n m的位數

假設n=88 m=8888

那麼n_length=2 m_length=4

count=n_length

所以丟到findam的開頭和結尾為(88,100, , ,2)

再來++count;

然後依序為(100,1000, , ,3)  (1000,8889, , ,4)

把count丟進去的用意是不用跑一次findam內的for就要判斷它是幾位數的

 

以下程式碼,若有更快的方法歡迎指教

 

#include <bits/stdc++.h>

using namespace std;

 

int fun1(int k)

{

    int temp,count=0;

    temp=k;

    while(temp>0)

    {

        temp/=10;

        ++count;

    }

    return count;

}

 

int power(int x,int y)

{

    int sum=1;

    for(int i=0;i<y;++i)

        sum*=x;

    return sum;

}

 

void findam(int start,int end,int *store,int &store_count,int count)

{

    for(int i=start;i<end;++i)

    {

        int sum=0,temp=i,a=power(10,count-1);

        while(a!=0)

        {

            sum+=power(temp/a,count);

            temp%=a;

            a/=10;

        }

        if(sum==i)

        {

            store[store_count]=i;

            ++store_count;

        }

    }

}

 

int main()

{

    int m,n;

    while(cin>>n>>m)

    {

        int n_length,m_length,count,j=n,store[1000]={0},store_count=0;

        n_length=fun1(n);

        m_length=fun1(m);

        count=n_length;

        if(n_length==m_length)

            findam(n,m,store,store_count,count);

        else

            for(int i=0;i<=m_length-n_length;++i)

            {

                if(i==0)

                    findam(n,power(10,count),store,store_count,count);

                else if(i==m_length-n_length)

                    findam(power(10,count-1),m+1,store,store_count,count);

                else

                    findam(power(10,count-1),power(10,count),store,store_count,count);

                ++count;

            }

        for(int i=0;i<store_count;++i)

        {

            cout<<store[i];

            if(i!=store_count-1)

                cout<<" ";

        }

        if(store_count==0)

            cout<<"none";

        cout<<endl;

    }

    return 0;

}

 
ZeroJudge Forum