JAVA每周一题(3)-----水仙花数
求100-999中的水仙花数,(若三位数abc,abc=a^3+b^3+c^3, 则称abc为水仙花数。如153,1^3+5^3+3^3=1+125+27=153,则153是水仙花数)----------------解决方案--------------------------------------------------------
我X,搞这种。
----------------解决方案--------------------------------------------------------
以下是引用谁与争疯在2010-6-28 10:16:21的发言:
我X,搞这种。
你是来结婚的吗? 我X,搞这种。
----------------解决方案--------------------------------------------------------
public class FlowerNumber {
public static void main(String[] args){
System.out.println("100~999之间的水仙花数是:");
for(int custNo=100;custNo<=999;custNo++){
int geWei=custNo%10;
int shiWei=custNo/10%10;
int baiWei=custNo/100%10;
if(custNo==geWei*geWei*geWei+shiWei*shiWei*shiWei+baiWei*baiWei*baiWei){
System.out.println(custNo);
}
}
}
}
============================
0~999之间的水仙花数是:
153
370
371
407
----------------解决方案--------------------------------------------------------
以下是引用wy19860426在2010-6-28 19:13:30的发言:
public class FlowerNumber {
public static void main(String[] args){
System.out.println("100~999之间的水仙花数是:");
for(int custNo=100;custNo<=999;custNo++){
int geWei=custNo%10;
int shiWei=custNo/10%10;
int baiWei=custNo/100%10;
if(custNo==geWei*geWei*geWei+shiWei*shiWei*shiWei+baiWei*baiWei*baiWei){
System.out.println(custNo);
}
}
}
}
============================
0~999之间的水仙花数是:
153
370
371
407
打错了,是100~999之间 public class FlowerNumber {
public static void main(String[] args){
System.out.println("100~999之间的水仙花数是:");
for(int custNo=100;custNo<=999;custNo++){
int geWei=custNo%10;
int shiWei=custNo/10%10;
int baiWei=custNo/100%10;
if(custNo==geWei*geWei*geWei+shiWei*shiWei*shiWei+baiWei*baiWei*baiWei){
System.out.println(custNo);
}
}
}
}
============================
0~999之间的水仙花数是:
153
370
371
407
----------------解决方案--------------------------------------------------------
程序代码:
import java.util.Scanner;
public class shuixianhua
{
public static void main(String[] args)
{
int x=100,i,a,b,c;
for(;x<=999;x++)
{
a=x%10;b=((x-a)%100)/10;c=(x-b*10-a)/100;/*a为个位,b为十位,c为百位*/
if(x==(Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3)))
System.out.print(x+"\t");
}
}
}
public class shuixianhua
{
public static void main(String[] args)
{
int x=100,i,a,b,c;
for(;x<=999;x++)
{
a=x%10;b=((x-a)%100)/10;c=(x-b*10-a)/100;/*a为个位,b为十位,c为百位*/
if(x==(Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3)))
System.out.print(x+"\t");
}
}
}
----------------解决方案--------------------------------------------------------
程序代码:
//水仙花数
class Daffodils {
public static boolean isDaffodils(int a) { //判断是否水仙花数
int hundred = a / 100 % 10;
int ten = a / 10 % 10;
int unit = a % 10;
return (a == hundred*hundred*hundred + ten*ten*ten + unit*unit*unit) ? true : false;
}
public static void printDaffodils(int a, int b) { //输出从a到b的水仙花数
for (int i = a; i <= b; i++) {
if (Daffodils.isDaffodils(i))
System.out.println(i);
}
}
}
public class MyClass {
public static void main(String[] args) {
int from = 100, to = 999; //从 100 到 999
System.out.println("以下是您要的水仙花数 从" + from + "到" + to);
Daffodils.printDaffodils(from, to);
}
}
//欢迎拍砖,谢谢
class Daffodils {
public static boolean isDaffodils(int a) { //判断是否水仙花数
int hundred = a / 100 % 10;
int ten = a / 10 % 10;
int unit = a % 10;
return (a == hundred*hundred*hundred + ten*ten*ten + unit*unit*unit) ? true : false;
}
public static void printDaffodils(int a, int b) { //输出从a到b的水仙花数
for (int i = a; i <= b; i++) {
if (Daffodils.isDaffodils(i))
System.out.println(i);
}
}
}
public class MyClass {
public static void main(String[] args) {
int from = 100, to = 999; //从 100 到 999
System.out.println("以下是您要的水仙花数 从" + from + "到" + to);
Daffodils.printDaffodils(from, to);
}
}
//欢迎拍砖,谢谢
----------------解决方案--------------------------------------------------------
程序代码:
import java.util.Scanner;
public class NarcissisticNumber
{
static int place(int s)
{
int i=0;
for(;s!=0;i++)
{
s/=10;
}
return i;
}
static void action(int s,int e)
{
int c=0,n;
for(int i=s;i<=e;i++)
{
int sum=0,t=i;
n=NarcissisticNumber.place(t);
for(;t!=0;)
{
sum+=Math.pow(t%10,n);
t/=10;
}
if(i==sum)
{
c++;
System.out.println(i+"是水仙花数。");
}
}
if(0==c)
{
System.out.println(s+"到"+e+"区间内没有水仙花数。");
}
}
static boolean judge(int s)
{
int sum=0,n;
n=NarcissisticNumber.place(s);
for(int i=0,t=s;t!=0;i++)
{
sum+=Math.pow(t%10, n);
t/=10;
}
if(s==sum)
{
return true;
}
else
{
return false;
}
}
/**
* @param args
*/
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
System.out.println("请输入你要判断水仙花数的起始数字");
int s=in.nextInt();
System.out.println("请输入你要判断水仙花数的末数字,若只判断一个数是否为水仙花数,请输入1");
int e=in.nextInt();
if(e==1|s==e)
{
if(NarcissisticNumber.judge(s))
{
System.out.println(s+"是水仙花数。");
}
else
{
System.out.println(s+"不是水仙花数。");
}
}
else
{
NarcissisticNumber.action(s,e);
}
}
}
这个是我老早以前写的 不管几位都能测 public class NarcissisticNumber
{
static int place(int s)
{
int i=0;
for(;s!=0;i++)
{
s/=10;
}
return i;
}
static void action(int s,int e)
{
int c=0,n;
for(int i=s;i<=e;i++)
{
int sum=0,t=i;
n=NarcissisticNumber.place(t);
for(;t!=0;)
{
sum+=Math.pow(t%10,n);
t/=10;
}
if(i==sum)
{
c++;
System.out.println(i+"是水仙花数。");
}
}
if(0==c)
{
System.out.println(s+"到"+e+"区间内没有水仙花数。");
}
}
static boolean judge(int s)
{
int sum=0,n;
n=NarcissisticNumber.place(s);
for(int i=0,t=s;t!=0;i++)
{
sum+=Math.pow(t%10, n);
t/=10;
}
if(s==sum)
{
return true;
}
else
{
return false;
}
}
/**
* @param args
*/
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
System.out.println("请输入你要判断水仙花数的起始数字");
int s=in.nextInt();
System.out.println("请输入你要判断水仙花数的末数字,若只判断一个数是否为水仙花数,请输入1");
int e=in.nextInt();
if(e==1|s==e)
{
if(NarcissisticNumber.judge(s))
{
System.out.println(s+"是水仙花数。");
}
else
{
System.out.println(s+"不是水仙花数。");
}
}
else
{
NarcissisticNumber.action(s,e);
}
}
}
----------------解决方案--------------------------------------------------------
大家的思路都是把一个数按位拆开来运算的。怎么没有人反过来,按组合来做啊。比如153.就是由数字1,5,3组合起来的
只要满足a^3+b^3+c^3 = a*100+b*10+c就行了。从效率来讲,这样会好一点。
----------------解决方案--------------------------------------------------------
回复 9楼 linjx0123
因为拆分感觉比较直观,按照这种思路应该怎么写呢?谢谢指教! ----------------解决方案--------------------------------------------------------