PAT1091 N-自守數(java實現)
阿新 • • 發佈:2019-01-14
題目地址:https://pintia.cn/problem-sets/994805260223102976/problems/1071785664454127616
題目描述:
如果某個數 K 的平方乘以 N 以後,結果的末尾幾位數等於 K,那麼就稱這個數為“N-自守數”。例如 3×92^2 =25392,而 25392 的末尾兩位正好是 92,所以 92 是一個 3-自守數。
本題就請你編寫程式判斷一個給定的數字是否關於某個 N 是 N-自守數。
- 輸入格式:
輸入在第一行中給出正整數 M(≤20),隨後一行給出 M 個待檢測的、不超過 1000 的正整數。 - 輸出格式:
對每個需要檢測的數字,如果它是 N-自守數就在一行中輸出最小的 N 和 N*K^2
的值,以一個空格隔開;否則輸出 No。注意題目保證 N<10。
解題方法:
這道題主要考察陣列和型別轉化以及字串的擷取。將輸入的數儲存在一個數組a中然後將N*K^2的運算結果也儲存在一個數組temp中,之後將結果轉化為字元型並在結果陣列temp中擷取和輸入數字相同長度的字串比較是否相等即可。
易錯點:題目要求輸出最小的N所以for迴圈中一開始匹配到的就是最小的N,直接break出去就可以。對於沒有匹配的輸出No,此處用了一個flag做標記,內層for迴圈結束後沒有匹配到的第i個就會輸出No
程式:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int M;
Scanner sc = new Scanner(System.in);
M=sc.nextInt();
if (M>=0&&M<=20) {
int a[] = new int[M];
for (int i = 0; i < a.length; i++) {
a[i]=sc.nextInt();
}
int temp[] = new int[M];
String s1[] = new String[M];
String s2[] = new String[M];
for (int i = 0; i < M; i++) {
boolean flag = true;
for (int j = 1; j < 10; j++) {
temp[i]=j*a[i]*a[i];
s1[i] = String.valueOf(a[i]);
s2[i] = String.valueOf(temp[i]);
if (s2[i].substring(s2[i].length()-s1[i].length(),s2[i].length()).equals(s1[i])) {
System.out.println(j+" "+temp[i]);
flag= false;
break;
}
}
if (flag) {
System.out.println("No");
}
}
}
}
}