几种数
1、水仙花数
所谓的水仙花数是指一个3位数,其各位数字立方和等于该数本身。例如153是一水仙花数,因为153=111+555+333
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
for(i=100;i<=999;i++)
{
if(i==((i/100)*(i/100)*(i/100)+(i%10)*(i%10)*(i%10)+(i%100/10)*(i%100/10)*(i%100/10)))
printf("%d
",i);
}
return 0;
}
这个看上去不难。
下面,我们来看等于阶乘和的三位数。
2、等于阶乘和的三位数
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,a,b,c;
int j,s1,s2,s3;
for(i=100;i<=999;i++)
{
a=i/100;
b=(i%100)/10;
c=i%10;
for(j=1,s1=1;j<=a;j++)
{
s1=s1*j;
}
for(j=1,s2=1;j<=b;j++)
{
s2=s2*j;
}
for(j=1,s3=1;j<=c;j++)
{
s3=s3*j;
}
if(s1+s2+s3==i)
{
printf("%d
",i);
}
}
return 0;
}
这个代码,想想应该能够自己敲出来。
前面两个都是我自己敲的。
不过,后面,嘿嘿~~
3、回文数
所谓回文数,就是一个数正反都可以读通。
下面请欣赏:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,p=0,j,k=0;
scanf("%d",&n);
p=n;
while(p>0)
{
j=p%10;
p=p/10;
k=j+k*10;
}
if(k==n)
{
printf("Yes
");
}
else
{
printf("No
");
}
return 0;
}
这是书上的答案,你细细一想。只有把这个数反过来与原来的数相等,它就是回文数。
4、自守数
自守数:一个数平方的尾数等于该数的自然数。
想想其实不怎么难。不过自我感觉有一点抽象。
看代码吧!
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,b=1;
scanf("%d",&n);
while(b<=n)
{
b=b*10;
}
if((n*n-n)%b==0)
printf("Yes
");
else
printf("No
");
return 0;
}
我感觉循环哪里有点抽象。不过想想是哪个样子。
5、完数
一个数如果恰好等于它的因子之和,它就是完数。
或许因子是什么都已经忘了。
所谓因子就是因数,比如6=2x3. 这里2和3就是因子。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i,sum=0;
scanf("%d",&n);
for (i=1;i<n;i++)
{
if(n%i==0)
{
sum=sum+i;
}
}
if(n==sum)
{
printf("Yes,its factors are");
for(i=1;i<n;i++)
{
if(n%i==0)
{
printf(" %d",i);
}
}
printf("
");
}
else
{
printf("No
");
}
return 0;
}
看着代码,很好理解。这是很好的代码,但是自己就是做不来。
6、素数
素数不需要介绍了吧!就是质数。
那素数该怎么求呢?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m,n,i,s;
scanf("%d %d",&m,&n);
for(i=m;i<=n;i++)
{
int flag=0;
for(s=2;s<i;s++)
{
if(i%s==0)
{
flag=1;
break;
}
}
if(flag==0)
{
printf(" %d",i);
}
}
printf("
");
return 0;
}
只要可以找到除1和它本身之外的数被它整除。它就不是素数。
你知道怎么求,为啥代码写不出来呢?
7、最后:最大公约数和最小公倍数
先来代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m,n,a,b;
scanf("%d %d",&a,&b);
m=a;
n=b;
while(n!=0)
{
int t=m%n;
m=n;
n=t;
}
printf("the greatest common divisor is %d
",m);
printf("the least common multiple is %d
",a/m*b);
return 0;
}
注意:最小公倍数=两数积除以它们的最大公约数。
为啥要printf(“the least common multiple is %d
”,a/mb); 为啥不ab/m,因为有可能a*b超过了int类型的最大值,所以先除。
最后:希望可以坚持继续码代码。也希望码代码快乐,多想,多码。