对于数本身,有很多有趣的性质,本篇只介绍三种有趣的数字,都是和数位拆分有关;
1、回文数:从左到右、从右到左读,都是一样的数;
2、水仙花数:在三位数中,有一些数字满足条件:各数位的数的平方和等于这个数字本身;
3、自守数:一个数平方后,尾数等于自己;
1、回文数的判断:
1.1 将一个数字按数位拆分,并且放到一个数组中;
1.2 让这个数组进行首尾比较;
上代码:
//回文数的判断
//不定数位的拆分+首尾判断
#include<cstdio>
int a[20];
bool pd(int x)//判断这个数字是否是回文,是的话返回1,否返回0;
{
int n=0;
while(x>0)//对x进行数位拆分
{
a[++n]=x%10;//每次将个位放进a数组中
x/=10;
}
//a数组的长度是n
for(int i=1;i<=n/2;i++)//枚举前半段,分别和后半段对称的位置进行比较
{
if(a[i]!=a[n-i+1])//有一个不符合要求,就是错的
{
return 0;
}
}
return 1;//以上判断过程能完成,所以是对的
}
int main()
{
int x;
scanf("%d",&x);
if(pd(x)>0)
{
printf("Y");
}
else
{
printf("0");
}
return 0;
}
2、水仙花数的判断与输出
//输出全部的水仙花数
//
#include<cstdio>
int main()
{
int s,n,a,b,c;
for(int i=100;i<=999;i++)//枚举三位数
{
a=i%10;//取个位
b=i/10%10;//取十位
c=i/100;//取百位
if( a*a*a+b*b*b+c*c*c == i )
{
printf("%d^3+%d^3+%d^3 = %d \n",a,b,c,i);
}
}
return 0;
}
3、自守数的判断
3.1 用x来求出自己的长度
//输出从1-10000的自守数
//数位长度的理解
#include<cstdio>
int main()
{
int s,x;
for(int i=1;i<=10000;i++)
{
s=i*i;
x=1; //求出对应的数位长度
while(x<i)//如果x比自己小,x*10
{
x=x*10;
}
//最终:原数是几位,x就是1*几个0;
//例如:原数是62,x就是100;原数是5628,x就是10000;
if(s%x==i)
{
printf("%d ^2 = %d \n",i,s);
}
}
return 0;
}