题目描述:
守形数是这样一种整数,它的平方的低位部分等于它本身。
比如25的平方是625,低位部分是25,因此25是一个守形数。
编一个程序,判断N是否为守形数。
输入:
输入包括1个整数N,2<=N<100。
输出:
可能有多组测试数据,对于每组数据,
输出"Yes!”表示N是守形数。
输出"No!”表示N不是守形数。
守形数是这样一种整数,它的平方的低位部分等于它本身。
比如25的平方是625,低位部分是25,因此25是一个守形数。
编一个程序,判断N是否为守形数。
输入:
输入包括1个整数N,2<=N<100。
输出:
可能有多组测试数据,对于每组数据,
输出"Yes!”表示N是守形数。
输出"No!”表示N不是守形数。
样例输入:
25
4样例输出:
Yes!
No!
算法实现一:
/* 守形树 */
//即该数的平方的低位部分等于他本身
//数位拆解
#include<stdio.h>
int main(){
int n,m,aa[10],bb[10],i;
freopen("test.txt","r",stdin);
while(scanf("%d",&n)!=EOF){
m=n*n; //平方
i=0;
do{ //拆解平方和的数位
bb[i++]=m%10;
m=m/10;
}while(m>0);
i=0;
do{ //拆解原数字的数位
aa[i++]=n%10;
n=n/10;
}while(n>0);
while(--i>=0){ //逐位比较
if(aa[i]!=bb[i])
break;
}
if(i<0)
printf("Yes\n");
else
printf("No\n");
}
fclose(stdin);
return 0;
}
算法实现二:
/* 守形树 */
//即该数的平方的低位部分等于他本身
//数位拆解
//sprintf函数 将格式化数据写入指定的字符串
#include<stdio.h>
#include<string.h>
int main(){
int n,m,i,j;
char aa[10],bb[10];
freopen("test.txt","r",stdin);
while(scanf("%d",&n)!=EOF){
m=n*n;
sprintf(aa,"%d",n);//!!
sprintf(bb,"%d",m);
i=strlen(aa)-1;
j=strlen(bb)-1;
for(;i>=0;i--,j--){
if(aa[i]!=bb[j])
break;
}
if(i<0)
printf("Yes!\n");
else
printf("No!\n");
}
fclose(stdin);
return 0;
}
特别注意:
1.算法一是一般思路,代码较繁琐,但是思路清晰,算法二利用了特殊库函数sprintf,则不必进行数位拆解工作,直接比较字符,值得学习;