#33745: c++解題思路,不使用pow的暴力解


kk20180820@gmail.com (Wayne Yang)

學校 : 國立鳳山高級中學
編號 : 172018
來源 : [49.159.254.231]
最後登入時間 :
2024-03-16 17:31:07
a040. 阿姆斯壯數 | From: [49.159.254.231] | 發表日期 : 2023-01-30 00:36

//該題受到a034. 二進位制轉換啟發

#include<iostream>

using namespace std;

int main(void){

    int n,m;
    while(cin>>n>>m){        //先導入範圍

        bool can=false;          //設定一個布林值can,作為該範圍中有無阿姆斯壯數的標籤(用來判斷是否輸出none)

        for(int i=n;i<=m;i++){

            int t;                       // t作為一個代替i去計算的變數,目的為保留i
            int r;                       // r記錄下t除以10之後的餘數

            int num = 0;          //num紀錄t為幾位數,主要以while迴圈執行次數累加來記錄
            int sum = 0;           // sum紀錄每回餘數r 開  i值位數num  次方後的值的總和
            

            t=i;                        // i將被計算的重責大任交付給t
            while(t>0){            //計算t的位數,while迴圈會在t不足以除以10的時候=0而停止
                num += 1;
                t /= 10;
            }


            t=i;
            while(t>0){           //計算sum

                r = t%10;
                t /= 10;
                int ss=1;           //ss作為r開 num 次方後所得的數,記得預設為1
                for(int j=0;j<num;j++){
                    ss *= r;
                }
                sum += ss;
            }

            if(sum==i){           //判斷sum值是否等於i值
                can = true;       //如果是,將can設為true
                cout<<sum<<" ";   //兩個符合阿姆斯壯數的i值之間有空格

            }

        }
        if(!can){                   //可能會被認為是多此一舉,但我覺得這樣比較值觀些,如果can是true(該範圍有阿姆斯壯數)
            cout<<"none";   //則加上!整個!can就會變成false,即不成立,即不輸出none
        }

        cout<<endl;           //換行,以執行下一個範圍

    }

    return 0;                     //資訊老師叮嚀return 0友善電腦:)
}

 
ZeroJudge Forum