阿姆斯壯數

Mars
請各位前輩幫忙解
小弟想了許久寫不出來....
有勞各位大大
謝謝

說明

Armstrong number (阿姆斯壯數)是指一個n位數的整數,它的所有位數的n次方和剛好等於自己。

例一:407 = 4^3 + 0^3 + 7^3
例二:1634 = 1^4 + 6^4 + 3^4 + 4^4

現在題目書入一個範圍,請找出該範圍內所有的armstrong number。
Input Format

n m (n、m兩整數由空格格開;且n0,m<=100000)
Output Format

若該範圍有值列印:int & int & int...
若該範圍找不到阿姆斯壯數則列印:none


P陳
這程式應該不難。

可以先將您寫的程式丟出來嗎?
或者
您先將功能分段,看您那一段寫不出來。程式丟出來後,大家就會來協助你。
MIS2000 Lab
這是老師出的作業嗎?或是期中、期末考題?

搜尋關鍵字「阿姆斯壯數」,
網路上滿多文章、解答,應該足夠您參考了

Mars
小弟自主進修程式語言,非學校作業
這二天工作比較忙,遲來的程式碼如下
目前有二個問題希望前輩提點,謝謝
1.輸入任何區間數字皆顯示"none"
2.列印範圍值:int1 & int2 & int3 .....中間的&如何表示?

#include<stdio.h>
#include<math.h>

int main(){
	int i,low,high,num1,num2,foundnum;
	int digits=0,digit=0,sum=0,count=0;
	
	scanf("%d%d",&low,&high);
	foundnum = 0;
	if(low>0 && high<=100000){
		for(i=low;i<=high;i++){
			num1 = i;
			num2 = i;
			while(num1>0){
				num1 /= 10;
				digits++;
			}
			while(num2>0){
				digit = num2 % 10;
				sum += pow(digit,digits);
				num2 /= 10;
			}
			if(i == sum){
				printf("%d",i);
				foundnum = 1;
			}
		}
		if(foundnum==0){
			printf("none");
		}
	}else{
		printf("out of range");
	}
	return 0;
}

最有價值解答

老頑童
1.
在for迴圈內你沒有將num, digit, digits歸零
所以這3個數會一直累加,導致結果不是你要的

2.
可在24行前加
if (foundnum == 1) printf(" & ");
Mars
非常感謝各位大大的協助
修改後程式碼如下
#include<stdio.h>
#include<math.h>

int main(){
	int i,low,high,num1,num2,foundnum;
	int digits=0,digit=0,sum=0,count=0;
	
	scanf("%d%d",&low,&high);
	foundnum = 0;
	if(low>0 && high<=100000){
		for(i=low;i<=high;i++){
			num1 = i;
			num2 = i;
			while(num1>0){
				num1 /= 10;
				digits++;
			}
			while(num2>0){
				digit = num2 % 10;
				sum += pow(digit,digits);
				num2 /= 10;
			}
			if(i == sum){
				if(foundnum==1){
					printf(" & ");
				}
				printf("%d",i);
				foundnum = 1;
			}
			num1 = num2 = sum = digit = digits = 0;
		}
		if(foundnum==0){
			printf("none");
		}
	}else{
		printf("out of range");
	}
	return 0;
}


回到頂部