#18303: 不用文字處理程式和math.h的解法(C++)


shaun0124 (debugger)

學校 : 國立臺灣師範大學附屬高級中學
編號 : 98989
來源 : [118.160.92.221]
最後登入時間 :
2019-10-19 14:31:32
a040. 阿姆斯壯數 | From: [49.159.173.254] | 發表日期 : 2019-07-03 22:01

因為暑期營隊還沒教到文字處理程式,

math.h也不知道為什麼無法正常運作,

所以只好多寫一大堆程式碼,

花了我一個多小時,debug了幾十次才刷完這題

 

以下是我的解法:

 

#include <iostream>

using namespace std;

int digit(int i){                                 //定義計算位數的函式
    int counter=1;
    for(int j=10;j<=i;j*=10){
        counter++;
    }
    return counter;

}

int pow(int x,int y){                        //定義次方的函式
    int px=1;
    for(int l=1;l<=y;l++){
        px*=x;
    }
    return px;

}

int main()
{
    int n,m,i,j,k,l,x,y,px,counter,sum;
    int d[7];
    bool find;
    while(cin>>n>>m){
        find=0;
        for(i=n;i<=m;i++){
            for(k=digit(i)-1;k>=0;k--){

                d[k]=((i%pow(10,k+1))-(i%pow(10,k)))/(pow(10,k));         //取出各位數字並保存到陣列中
        }
        sum=0;
        for(k=0;k<digit(i);k++){

            sum+=pow(d[k],digit(i));                //計算各位數字的位數次方的和
        }
        if(sum==i){                                       //判斷是否為阿姆斯壯數
            cout<<i<<" ";
            find=1;
        }
        
        if(find==0){                                      //未找到則顯示none
        cout<<"none";
        }
        cout<<endl;
        }
    return 0;

}

 
ZeroJudge Forum