1000以内的水莲花数(阿姆斯特朗数)

	int i, t, k, a[3];
	for(i = 2; i < 1000; i++) /*穷举要判定的数i的取值范围2~1000*/
	{
		for(t = 0,k = 1000; k >= 10; t++) /*截取整数i的各位(从高向低位)*/
		{
			a[t] = (i % k) / (k / 10); /*分别赋于a[0]~a[2}*/
			 k /= 10;
 			if(a[0]*a[0]*a[0] + a[1]*a[1]*a[1] + a[2]*a[2]*a[2] == i)
 			     /*判断i是否为阿姆斯特朗数*/
			     printf("%d\n", i); /*若满足条件,则输出*/
		}
	}

方法1:

第二个for循环的条件是k >= 10,从高位到低位截取这个数的每一位上的数存入a数组来实现阿姆斯特朗数的规则计算。


	int i, j, k, m, s, temp=0;
	for(i = 2; i < 1000; i++)
	{ 
		j = i;
		s = 0;
		while(j)
		{ 
			k = j % 10;
			j /= 10;
			s += k * k * k;
		}
		if(s == i)		 
			printf("%d\n", i);		
	}
方法2:

通过while循环来实现阿姆斯特朗数的规则计算,在编程中做除法运算时结果为小于0的小数时编程结果为0(当结果不为整数时舍去小数部分)。

注意要给s赋初值,否则使用s += 的时候会崩溃,因为s是不确定的。另外当变量为全局变量的时候编译器会给赋默认值0。

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页