close
Content

所謂 Armstrong number 指的是一個 n 位數的整數,它的所有位數的 n 次方和恰好等於自己。

如;1634 = 14+64+34+44

請依題目需求在一定範圍內找出該範圍內的所有 armstrong numbers.

Input

輸入共一行包含兩個數字n, m(n<m, n>0, m<=1000000),代表所有尋找 armstrong number 的範圍

Output

將所有範圍內的 armstrong number 依序由小到大輸出,如果沒有找到請輸出 none.

 

Sample Input #1
100 999
Sample Output #1
153 370 371 407
Sample Input #2
10 99
Sample Output #2
none
測資資訊:
記憶體限制: 512 MB
公開 測資點#0 (14%): 1.0s , <1K
公開 測資點#1 (14%): 1.0s , <1K
公開 測資點#2 (14%): 1.0s , <1K
公開 測資點#3 (14%): 1.0s , <1K
公開 測資點#4 (14%): 1.0s , <1K
公開 測資點#5 (15%): 1.0s , <1K
公開 測資點#6 (15%): 1.0s , <1K

C++

/*
要注意的是把每一個數輸進arr的方式
利用
arr[d++]=temp%10;
temp/=10;
例如 1634 輸進去就是 arr[7]={4,3,6,1,None,None,None};
那裡面的d會變成4 (d++代表先放進去後d再加一)
32行for (int i = 0; i < d; i++)
他會跑0,1,2,3,剛剛好就是四位數
*/
#include <iostream>
#include <math.h>
using namespace std;
 
int main() {
	int n,m;
	int ans=0; //計算有幾個阿姆斯壯數
	cin>>n>>m;
	for (int i = n; i <= m ; i++)
	{
		//要把n~m的每一位數字放進arr裡
		
		int arr[7];
		int temp=i;
		int d=0;
		while (temp)
		{
			arr[d++]=temp%10;
			temp/=10;
		}

		int sum=0;//嘗試算每個數字是否為阿姆斯壯數
		for (int i = 0; i < d; i++)
		{
			sum+=pow(arr[i],d);
		}
		if (sum==i){
			ans++;
			cout<<i<<" ";
		}
	}
	if (ans==0)//若沒有阿姆斯壯數就輸出"none"
	{
		cout<<"none";
	}
}

python

n,m=map(int,input().split())
flag=False
for num in range(n,m+1):
    arr=[int(x) for x in str(num)]
    len_arr=len(arr)
    #print(arr)
    ans=0
    for i in arr:
        ans+=pow(i,len_arr)
    if ans==num:
        flag=True
        print(ans,end=" ")
if flag==False:
    print("none")
arrow
arrow
    文章標籤
    高中生程式解題 python C++
    全站熱搜
    創作者介紹
    創作者 趴趴熊日常 的頭像
    趴趴熊日常

    資工趴趴熊的小天地

    趴趴熊日常 發表在 痞客邦 留言(0) 人氣()