水仙花数(armstrong)求解,两种方法

水仙花数,即各个位上的数的立方和等于这个数本身。

我写的解法如下:

#include <stdio.h>

int main()
{
	int a,b,c,d,i;
	for(i=0;i<1000;i++)
	{
	for(a=100;a<=999;a++)
	{
		b=(a/100)%10;
		c=(a/10)%10;
		d=a%10;
		if(a==(b*b*b+c*c*c+d*d*d))
		{
			printf("Armstrong:%d\n",a);
		}
	
	}
	}


	return 0;
}

此为传统解法

另一种解法:

#include  <stdio.h>

void main(void)
{
     int  p, q, r;            /* three digits             */
     int  p_cube, q_cube, r_cube; /* their cubes          */
     int  p100, q10;          /* their position values    */
     int  number;             /* the computed number      */
     int  cube_sum;           /* the sum of the cubes     */
     int  count = 0;          /* counter                  */

     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);
}
对比:

分别对此两种解法进行1000此循环后,测试运行时间

解法1,耗时0.115s

解法2,耗时0.066s

这两种解法的思路是完全相反的:

解法1是对已知数进行分解,然后进行立方和运算后与原值做比较,判断是不是水仙花数。解法二是先对各个位的数进行立方和运算,然后把它组合成一个三位数进行判断,少了分解的步骤,故节省系统开销。

解法1总共进行了900次循环,而解法2循环了1000此,在循环次数多的情况下耗时反而少,解法2的优势很明显

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值