1091 N-自守数 (15 分)
如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”。例如 3×92^2 =25392,而 25392 的末尾两位正好是 92,所以 92 是一个 3-自守数。本题就请你编写程序判断一个给定的数字是否关于某个 N 是 N-自守数。
输入格式:
输入在第一行中给出正整数 M(≤20),随后一行给出 M 个待检测的、不超过 1000 的正整数。
输出格式:
对每个需要检测的数字,如果它是 N-自守数就在一行中输出最小的 N 和 NK2的值,以一个空格隔开;否则输出 No。注意题目保证 N<10。
输入样例:
3
92 5 233
输出样例:
3 25392
1 25
No
做题首先要有思路:我的思路就是,循环镶嵌,再利用取余得到值然后比较输出
#include<stdio.h>
#include<math.h>
main ()
{
int M = 0, N = 0, K = 0;
int le = 0;
scanf ("%d", &M);
int H[ 4 ] = { 0 };
int r = 0;
//输出循环次数
for ( int x = 0; x<M; x++ )
{
scanf ("%d", &K);
N = K;//临时存储
int js = 0;//用于计数 记录是几位数字
//利用存储判断输出数字是几位数
while ( N != 0 )
{
N /= 10;
js++;
}
//i其实就是题目中的N;
for ( int i = 0; i<10; i++ )
{
le = i*pow (K, 2);
for ( int j = 0; j<js; j++ )
{
//将得到的值存储到数组中
H[ j ] = ( int ) ( le / pow (10, j) ) % 10;
}
int r = 0;
//开始计算数值
for ( int j = 0; j<js; j++ )
{
r = r + H[ j ] * pow (10, j);
}
//开始判断:如果是相等就输出,不相等就输出No
if ( r == K )
{
printf ("%d %d\n", i, le);
break;
}
else if ( i == 9 )
{
printf ("No\n");
}
}
}
getchar ();
return 0;
}