数字问题Armstrong数

  在三位正整数中,比如abc,有一些可以满足a^3+b^3+c^3=abc的条件,也就是说各个位数的立方和正好是该数的本身,这些数就叫做Armstrong数。试写一个程序求出所有的3位Armstring数。

最傻逼的写法,太麻烦了。。。。。。=================================================================================================

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int  main(void )
{
	 int number;
	 int pos,ten_pow;
	 int arm_no;
	 int temp,i;
	 float expon;
	 char line[100];
	 
	 printf("please key in number: ");
	 gets(line);
	 number =atoi(line);
	 
	 pos=0;
	 ten_pow= 1;
	 do{
 	     ten_pow*=10;	
 		 pos++;
 	   }while(ten_pow<number);
 	   
 	   if(ten_pow==number)
 	      printf("\n%d is not an Armstrong Number.",number);
       else
          {
          	ten_pow=number;
          	arm_no=0;
          	for(i=pos-1;i>=1;i--)
          	  {
	          	expon=exp(i*log(10.0));
	          	temp=ten_pow/expon;
	          	ten_pow%=(int)(expon+0.5);
	          	arm_no+=exp(pos*log(temp))+0.5;//exp是指数函数,log是对数函数
	          	
	          	
	          }
	          arm_no+=exp(pos*log(ten_pow))+0.5;
	          if(arm_no==number)
	            printf("\n%d is an Armstrong Number.",number);
	          else
	            printf("\n%d is not an Armstrong Number",number);
         }
  	return 0; 
}     
   
          	
下面两种比较易理解且比较简便的写法。。。。。。

#include<stdio.h>
#include<time.h>
int  main(void)
{
	int p,q,r;
	int number;
	int count=0;
	
	printf("\nArmstrong Number Search");
	printf("\n=======================");
	printf("\n\nCount Number");
	printf("\n------   -------");
	
	for(number=100;number<=999;number++)
	{
		p=number/100;
		q=(number%100)/10;
		r=number%10;
		if(p*p*p+q*q*q+r*r*r ==number)
		   printf("\n%3d%9d",++count,number);
	}
	printf("\n\nThere are %d 3-digit Armstrong Number.",count);
return 0;
}

=====================================================================================

#include<stdio.h>
int  main()
{
	int p,q,r;
	int p_cube,q_cube,r_cube;
	int p100,q10;
	int number;
	int cube_sum;
	int count=0;
	
	printf("\nArmstrong Number Search");
	printf("\n==================================");
	printf("\n\nCount Number");
	printf(" \n-------------------------------------");
	
	for(p=1,p100=100;p<=9;p++,p100+=100)
	{
		p_cube=p*p*p;
		for(q=q10=0;q<=9;q++,q10+=10)
		{
			q_cube=q*q*q;
			for(r=0;r<=9;r++)
			{
				r_cube =r*r*r;
				number=p100+q10+r;
				cube_sum=p_cube+q_cube+r_cube;
				if(number==cube_sum)
				  printf("\n%3d%9d",++count,number);
			}
		}
	}
printf("\n\nThere are %d 3-digit Armstrong Numbers",count);	
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值