c语言编程题打印出所有的“水仙花数”所谓“水仙花数”是指一个三位数其各位数字立方和等于该数本身

如题所述

打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数
本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
2.程序源代码:
main()
{
int i,j,k,n;
printf("'water flower'number is:");
for(n=100;n<1000;n++)
{
i=n/100;/*分解出百位*/
j=n/10%10;/*分解出十位*/
k=n%10;/*分解出个位*/
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
{
printf("%-5d",n);
}
}
printf("\n");
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-23
 /**
 * 打印 10000 以内的所有水仙花数
 * 
 * 所谓“水仙花数”即一个整数满足其值等于各个数位的立方和。
 * 例如:153是一个水仙花数,因为153=1*1*1+5*5*5+3*3*3
 * 
 * 1) 检查一个数num是否为水仙花数
 * 2) 检查一个范围内全部的num是否为水仙花数
 * 
 * num = 153;
 * n1 = 1  = num/10/10%10
 * n2 = 5  = num/10%10
 * n3 = 3  = num%10 
 * 
 * sum = 0; //每个数字3次方的累加和
 * 
 * n = num%10;  //n = 3    取最后一位
 * num = num/10;//num = 15 消掉最后一位
 * sum+= n*n*n
 * 
 * n = num%10;  //n=  5    取最后一位
 * num = num/10;//num = 1  消掉最后一位
 * sum+= n*n*n
 * 
 * n = num%10;  //n=  1    取最后一位 
 * num = num/10;//num = 0  消掉最后一位
 * sum+= n*n*n
 * 
 * num==0 结束
 * sum 3次方的累加和 
 * sum == num 相等 num 是水仙花数
 */
public class Demo04 {
 public static void main(String[] args) {
  for(int number=2; number<=100000; number++){
   int num = number;
   int sum = 0;
   while(true){
    int n = num%10;
    num /= 10;//num = num/10;
    sum += n*n*n;
    //System.out.println("n:"+n);//跟踪语句,跟踪n
    if(num==0){
     break;
    }
   }
   if(sum==number){
    System.out.print(number+" "); 
   }
  }
 }
}
希望能帮到你 望采纳!

第2个回答  2013-06-23
public class ShuiXianShu
{

/**
* 题目:打印出100-999之间所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
* 例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
* 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。*
*/
public static void main(String[] args)
{
for(int i=100;i<=999;i++)
{
int geWei,shiWei,baiWei;
baiWei=i/100;
shiWei=(i-baiWei*100)/10;
geWei=i-baiWei*100-shiWei*10;
if(i==geWei*geWei*geWei+shiWei*shiWei*shiWei+baiWei*baiWei*baiWei)
{
System.out.println(i);
}
}

}

}
第3个回答  2007-01-10
打印100-999之间的水仙花数!

方法1:
main()
{
int a,b,c,d;
for(a=100;a<=99;a++)
b=a/100;
c=a/10-b*10;
d=a-b*100-c*10;
if(b*b*b+c*c*c+d*d*d==a) printf("%d",a);
}

方法2:
main()
{
int i,j,k;
for(i=1;i<=9;i++)
for(j=1;j<=9;j++)
for(k=1;k<=9;k++)
{
if((i*i*i+j*j*j+k*k*k)==(i*100+j*10+k))
printf("%d",i*100+j*10+k);
}
}
第4个回答  2016-12-29
public static void main(final String[] args) {
System.out.println("所有的水仙花数如下:");
int x; // 百分位
int y; // 十位
int z; // 个位
for (int i = 100; i < 1000; i++) {
x = i / 100;
y = (i- x * 100) / 10;
z = i % 10;
if (i == (cubic(x) + cubic(y) + cubic(z))) {
System.out.println(String.format("找到水仙花数:%d", i));
}
}
}
private static int cubic(final int n) {
return (n * n * n);
}

所有的水仙花数如下:

找到水仙花数:153

找到水仙花数:370

找到水仙花数:371

找到水仙花数:407

相似回答