PAT-B 1091 N-自守數

Enjoy_process發表於2019-02-26

                                              PAT-B 1091 N-自守數

                     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 和 NK​2​​ 的值,以一個空格隔開;否則輸出 No。注意題目保證 N<10。

樣例輸入

3
92 5 233

樣例輸出

3 25392
1 25
No

分析

使用模除運算求得數的後幾位,具體看程式。

C++程式

#include<iostream>

using namespace std;

//設k為num位數,函式返回10^num 
int solve(int k)
{
	int t=1;
	while(k>0)
	{
		t*=10;
		k/=10;
	}
	return t;
}

int main()
{
	int m,n,k;
	scanf("%d",&m);
	while(m--)
	{
		scanf("%d",&k);
		for(n=1;n<10;n++)
		{
			int temp=solve(k); 
			if(k*k*n%temp==k)
			  break;
		}
		if(n<10)
		  printf("%d %d\n",n,n*k*k);
		else
		  printf("No\n");//沒有 
	}
	return 0;
}

 

相關文章