本帖最後由 鄭繼威 於 2024-1-20 16:20 編輯
1. 題目說明:
請依下列題意進行作答,使輸出值符合題意要求。
2. 設計說明:
請撰寫一程式,包含名為compute()的函式,接收主程式傳遞的一個整數n(0 < n < 1000),compute()輸出所有小於n的阿姆斯壯數並回傳總和至主程式輸出。
阿姆斯壯數的定義:若為k位數的正整數,則其所有位數數字的k次方與該數相等。
補充說明:
阿姆斯壯數(Armstrong number),又稱自戀數(Narcissistic number)(因為各數字 n 次方後加總又等於本身,感覺很自戀?)。
例如 153 可以滿足 1³ + 5³ + 3³ = 153,153 就是個阿姆斯壯數,阿姆斯壯數有 88 個,最大為 39 位數的 115132219018763992565095597973971522401,已證實超過 39 位數不存在阿姆斯壯數。
提示:若使用 Java 語言答題,請以「JP」開頭命名包含 main 靜態方法的 class,評測系統才能正確評分。
3. 輸入輸出:
輸入說明
一個整數n(0 < n < 1000)
輸出說明
所有小於n的阿姆斯壯數與其總和
範例輸入
999
範例輸出
1
2
3
4
5
6
7
8
9
153
370
371
407
1346- import java.util.Scanner;
- public class JP310 {
- static int compute(int n)
- {
- int total=0;
- for(int i=1; i<n; i++)
- {
- int sum=0;
- String str=String.valueOf(i);// int to string
- int len=str.length();//length() 得到字串長度
- for(int j=0; j<len; j++)
- {
- int t=str.charAt(j)-'0';//將各個數字轉換為int
- sum+=Math.pow(t, len);//並進行自身位數次方的動作
- }
- if(sum==i)//判斷是否為阿姆斯壯數
- {
- System.out.println(i);
- total+=i;
- }
- }
- return total;
- }
- public static void main(String[] args) {
- Scanner s=new Scanner(System.in);
- int n=s.nextInt();
- System.out.println(compute(n));
- }
- }
複製代碼- import java.util.Scanner;
- public class Ch01 {
- public static int compute(int m) //999
- {
- int total=0;
- //for 1~998
- for(int n=1;n<m;n++)
- {
- //int->string
- String str=Integer.toString(n); //"153"
-
- double sum=0;
- for(int i=0;i<str.length();i++)
- {
- sum=sum+Math.pow(str.charAt(i)-48,str.length());
- }
- if((int)(sum)==n)
- {
- System.out.println(n);
- total=total+n;
- }
- }
- return total;
- }
- public static void main(String[] args) {
- // TODO 自動產生的方法 Stub
-
- Scanner s=new Scanner(System.in);
-
- int m=s.nextInt();
- System.out.println(compute(m));
- }
- }
複製代碼 |