输入一个数,实现判断它是否为水仙花数

Kinking 2011-05-12 07:34:13
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)
...全文
1930 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kinking 2011-05-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 latitude4 的回复:]
import java.io.*;


public class ShuiXian {
public static void main(String[] args) throws Exception {
//提示输入数字
System.out.println("此程序判断水仙花数,请输入一个位数:");
BufferedReader in = new BufferedReader(n……
[/Quote]
貌似蛮强 但看起来有点难!
latitude4 2011-05-15
  • 打赏
  • 举报
回复
import java.io.*;


public class ShuiXian {
public static void main(String[] args) throws Exception {
//提示输入数字
System.out.println("此程序判断水仙花数,请输入一个位数:");
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

//读取一行,存入s
String s = in.readLine();
int m = Integer.parseInt(s);

int n;
int sum=0;//sum为各个位上的数相加,实现水仙花数的判断
for(int i=0;i<s.length();i++){
n = m/xixi(10,i)%10; //xixi(10,i) 10的n次方 , 得到n为各个位上的值
sum = sum+xixi(n,s.length());
}
if(m==sum){
System.out.println("是水仙花数");
}
else
System.out.println("不是水仙花数");
}

//实现每个数上的几位数次方
public static int xixi(int m ,int n){ //m为每个位上的数 n为几次方
int x = 1;
for(int i=0;i<n;i++){
x=x*m;
}
return x;
}
}
Kinking 2011-05-15
  • 打赏
  • 举报
回复
呃 我想实现的是输入一个数,然后判断,输出这个数是否为水仙花数
ZPH2254 2011-05-15
  • 打赏
  • 举报
回复
就不能写点注释出来?
我知道这位仁兄的意思,好像是求21位的水仙花数,前几天看到过一个程序,不过和这个不一样[Quote=引用 2 楼 toddbckele 的回复:]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define N 21

void ncf();
void fun();
int z[10][N+1];

int main()
{
int start=time(NULL),end;
printf("程序开始运行……
[/Quote]
TKD03072010 2011-05-15
  • 打赏
  • 举报
回复

import java.util.Scanner;
public class FlowerNum {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入次方数:");
int n = sc.nextInt();
flower(n);
}

/**
* 判断一个数是否为花朵数,如果是打印出该数
*
* @param n 次方
*/
private static void flower(int n) {
for (int i = (int) Math.pow(10, n - 1); i < (int) Math.pow(10, n); i++) {
String s = String.valueOf(i);
int count = 0;
for (int j = 0; j < s.length(); j++) {
count += (int) Math.pow(Integer.parseInt(s.charAt(j) + ""), n);
}
if (count == i) {
System.out.println(i);
}
}
}
}


楼主参照一下这个,这是适用于对于n比较小的时候!
求知路漫漫 2011-05-15
  • 打赏
  • 举报
回复
public static void main(String[] args) {

int baiwei=0;
int shiwei=0;
int gewei=0;
for(int i=100;i<999;i++)
{
baiwei=i/100;
shiwei=i/10%10;
gewei=i%10;
if(i==(baiwei*baiwei*baiwei+shiwei*shiwei*shiwei+gewei*gewei*gewei))
System.out.println(i);
}

}

Inhibitory 2011-05-15
  • 打赏
  • 举报
回复
public class Test {
public static void main(String[] args) {
for (int i = 100; i < 1000; ++i) {
int n = i;
int sum = 0;
int bits = calculateBits(i);

while (n != 0) {
sum += Math.pow(n % 10, bits);
n /= 10;
}

if (sum == i) {
System.out.println(sum);
}
}
}

public static int calculateBits(int n) {
int count = 0;

do {
n /= 10;
++count;
} while (n != 0);

return count;
}
}
凡心未灭 2011-05-15
  • 打赏
  • 举报
回复
几个月前写过,可以把for循环里的10000改成更大的上限

public class Narcissistic
{
public static void main (String args[])
{
System.out.println("Get Narcissistic Number from 100 to 10,000:");
for(int n=100;n<=10000;n++)//Check number from 100 to 10,000
if(isNarcissistic(n))
System.out.print(n+" ");
}
static boolean isNarcissistic(int x)//method to judge whether x is Narcissistic Number or not
{
int digit[ ]=new int[20];//array to stores each digit of x
int sum=0,places=String.valueOf(x).length();//places is the digit of x
int y=x;//copy x to complete the following loop
for(int i=0;i<places;i++){
digit[i]=y%10;
y=y/10;
}
for(int i=0;i<places;i++)
sum+=Math.pow(digit[i],places);
if(x==sum)
return true;
else
return false;
}
}
amoy_yang 2011-05-12
  • 打赏
  • 举报
回复
水仙花数 指的是是一个三位数
quanmu 2011-05-12
  • 打赏
  • 举报
回复
3楼的不错!顶!
漆黑之勺 2011-05-12
  • 打赏
  • 举报
回复
public class Shuixianhua {


public static void main(String[] args) {

int a=0;
int b=0;
int c=0;
for(int i=100;i<999;i++)
{
a=i/100;
b=i/10%10;
c=i%10;
if(i==(a*a*a+b*b*b+c*c*c))
System.out.println(i);
}

}

}

类似这种吧应该
toddbckele 2011-05-12
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define N 21

void ncf();
void fun();
int z[10][N+1];

int main()
{
int start=time(NULL),end;
printf("程序开始运行!\n");
ncf();
fun();
end=time(NULL);

printf("这个程序共运行了%d秒!\n",end-start);

}

void ncf()
{
int temp,i,j,m;
for(i=0;i<10;i++)
{
z[i][0]=1;
}

for(i=0;i<10;i++)
{
for(j=0;j<N;j++)
{
m=0;
temp=0;
for(m=0;m<N;m++)
{
temp=temp/10+z[i][m]*i;
z[i][m]=temp%10;
}
}
}

for(i=0;i<10;i++)
{
for(j=N;j>=0;j--)
if(z[i][j]!=0)
break;
z[i][N]=j+1;
}
}

void fun()
{
int a[N]={0},b[N]={0},c[N]={0},d[10]={0};
int i,j,x,temp,f=0;

a[N-1]=1;

while(a[0]!=9)
{

for(i=0;i<N;i++)
{
temp=0;

for(x=0;x<N;x++)
{
temp=b[x]+z[a[i]][x]+temp;
b[x]=temp%10;
temp=temp/10;
if(temp==0&&x>=z[a[i]][N])
break;
}
}

for(i=0;i<N;i++) d[b[i]]++;

x=0;

for(i=0;i<10;i++)
{

for(j=0;j<d[i];j++)
{
c[x]=i;
x++;
}
}

f=0;

for(i=0;i<N;i++)
{
if(a[i]!=c[i])
{
f=a[i]-c[i];
break;
}
}

if(f==0&&b[N-1]>=1&&b[N-1]<=9)
{
for(i=N-1;i>=0;i--)
printf("%d",b[i]);
printf("\n");
}

for(i=N-1;i>0;i--)
{
if(a[i]!=9)
break;
}

temp=a[i];

while(i<N)
{
a[i]=temp+1;
i++;
}

for(i=0;i<N;i++)
{
b[i]=0;
c[i]=0;
}

for(i=0;i<10;i++)
{
d[i]=0;
}
}
}
Kinking 2011-05-12
  • 打赏
  • 举报
回复
自己先顶……

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧