1. 程式人生 > >PAT1091 N-自守數(java實現)

PAT1091 N-自守數(java實現)

題目地址: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"); } } } } }