close

內容
所謂 Armstrong number 指的是一個 n 位數的整數,它的所有位數的 n 次方和恰好等於自己。
如;1634 = 14 + 64 + 34+ 44 
請依題目需求在一定範圍內找出該範圍內的所有 armstrong numbers.


輸入說明                                                                              輸出說明

輸入包含兩個數字n, m(n<m, n>0, m<=1000000)              將所有範圍內的 armstrong number 依序由小到大輸出

,代表所有尋找 armstrong number 的範圍                        ,如果沒有找到請輸出 none.

 

c++解法

感謝  羊貓貓===以上大大--以下新手===  的分享

https://zerojudge.tw/ShowThread?postid=8858&reply=0

以下程式碼是我重新打一次的並加上我的理解,大家請先去看 羊貓貓===以上大大--以下新手=== 寫的。

#include <iostream>
using namespace std;

//自建一個函式 
int pow(int in1,int in2)//用的時候直接打 pow(in1,in2) in1,in2,為所要計算的變數 
{
    int out=1;
    while(in2--)
    {
        out*=in1;//計算該位數數字 乘上 位數的次方數 
    }
    return out;//返回out的值 也就是最後pow的值
}

int main()
{
    int in1,in2;
    while(cin>>in1>>in2)
    {
        int count=0;
        //用k來判斷位數 
        for(int i=in1;i<=in2;i++)
        {
            int cn1=i ,k=1;
            while(cn1/=10)//每執行一次while cn1會除10 直到cn1剩下個位數 
            {
                k++;
            }
            
            int sum=0;
            cn1=i;
        
            //把各個位數乘上次方數 並用sum做加總 
            while(cn1)//此用法跟上一個while相似 但會多做一次 
            {
                sum+=pow(cn1%10,k);
                cn1/=10; 
            }
        
            //比較是否為阿姆斯壯數 
            if(sum==i)
            {
                cout<<sum<<" ";
                count++;//如果指定範圍內無阿姆斯壯數則 count保持0 
            }
        }
        
        
        //指定範圍內無阿姆斯壯數
        if (count==0)
        {
            cout<<"none";
        }
        cout<<endl;
    }
    return 0;
}

 

心得

雖然自己也有寫出來,但計算太慢,所以只好看別人怎麼寫。

看了才知道原來有這種方法知道int有幾位數,還有while的其他用法。

 

這個是我一開始寫的,單純做紀錄。

//一開始的思考方式(雖然解得出來,但會超花時間,所以就是個錯誤的解法) 
//利用string的長度判斷幾位數  所以 
//先int 轉 string 之後一個一個轉回int 再乘幾次方 
//可能是轉來轉去導致太慢 
#include <iostream>
#include <string>
#include <math.h>
#include<sstream>
using namespace std;
int main ()
{
	string str1,str2;
	stringstream stm;
	int n1,n2=0,n3,n4,n5,n6=0;
	while(true)
	{
		cin>>n4>>n5;
		for(int t=n4;t<=n5;t++)
		{
			stm.str("");
			stm<<t;
			str1=stm.str();
			for(int i=0;i<str1.length() ;i++)
			{
				istringstream is(str1);
				is>>n3;
				n1=str1[i]-'0';
				n2=n2+pow(n1,str1.length());
			}
			if(n2==n3)
			{
				cout<<n2<<endl;
				n6=n6+1;
			}
			str1.clear();
			n2=0;
		}
		if(n6==0)
		{
			cout<<"none"<<endl;
		}
	}
	return 0;
}
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 豪CO 的頭像
    豪CO

    程式道路,必為豐富

    豪CO 發表在 痞客邦 留言(0) 人氣()