在三位正整数中,比如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);
}