关于水仙花数的一个改进问题,3位数的我已经写好了,如何用方便的将其改为求4位或5位的,初学Java,望指教.
自己想了一个方法,借助字符串来实现,这样是不是就可以利用"char charAt(int t)"来获取每一位数字?可是我不知道该怎样把一个整形数赋给一个字符串,大家说呢?或者大家有什么好的建议?附下我写的程序:
import java.io.*;
public class Flower{
        public static void main(String args[]){
        int i,bw,sw,gw,t;
        for(i=100;i<=999;i++){

         bw=i/100;
sw=(i/10)%10;
gw=i%10;
t=bw*bw*bw+sw*sw*sw+gw*gw*gw;
if(i==t)
System.out.println(t);
}
}
}

解决方案 »

  1.   

    可是我不知道该怎样把一个整形数赋给一个字符串int i = 1000 ;String iStr = Integet.toString(i);
      

  2.   

    恩,多谢,呵呵.以前没有学过Java,现在学Java语言的面向对象程序设计,有很多不懂的地方,好望大家指教了.
      

  3.   

    interpb(曾曾胡,深怕情多累美人!) 说得对,只是有个地方打错了
    int i = 1000 ;String iStr = Integer.toString(i);
    把r整成t了,呵呵,应该是笔误吧
      

  4.   

    String s1="sss";
     int    i1=2; s1+i1可以直接用的,编译器会自动转化的为类似一楼的的写法 当然1楼的是Java比较标准的写法
      

  5.   

    int i = 1000;
    String str = ""+i;
      

  6.   

    int i = 1000 ;
    String iStr = Integer.toString(i);
    很正规的写法int i = 1000;
    String str = ""+i;
    很潇洒的写法
      

  7.   

    有强制转换的int i=100;
    String s= Integet.toString(i);
    和一楼的一样 
      

  8.   

    int i = 1000 ;
    String iStr = Integer.toString(i);
    很正规的写法int i = 1000;
    String str = ""+i;
    很潇洒的写法
    完全正确
      

  9.   

    我明白你问的是什么,是类似超大数的输出如何不用科学技术法显示的问题八,我遇到过,可是没办法ING
      

  10.   

    n种办法  String str=""+i;最帅......
      

  11.   

    int i = 1000;
    String str = ""+i;学习。。
      

  12.   

    int i = 1000 ;
    String iStr = Integer.toString(i);
    很正规的写法
    -----------------------------
    UP
      

  13.   

    int i = 1000 ;String iStr = Integet.toString(i);
    ----------------------------------
    是我选这个.
    int i = 1000;
    String str = ""+i;
    ----------------------------------
    这方法的确见有人这么写过。
      

  14.   

    int i = 1000 ;String iStr = Integet.toString(i);
    ----------------------------------
    是我选这个.
    int i = 1000;
    String str = ""+i;
    ----------------------------------
    两种方法 不同的书都用过~
      

  15.   

    int i = 1234;
    String str = String.valueOf(i);
      

  16.   

    JAVA有强制类型转换机制
    int i=1234;
    String str=i+" ";
    就OK了
      

  17.   

    int i = 1000;
    String str = ""+i;这是最不可取的方法,一是字面意义不明,二是性能不好,因为字符串对象是常量的,所以使用字符串连接会产生多余的对象,耗费内存。
    Integer.toString(i)是最合适的。
      

  18.   

    Integer.toString(i)就不产生常量不耗内存了?
      

  19.   

    allwe2003() ( ) 信誉:100    Blog  2007-3-29 15:55:02  得分: 0  
     
            恩,回答的挺全的,呵呵。
            哪位有时间写一个求水仙花的改进算法吗?
            能够根据输入的位数来求该水仙花。
            如:输入4,就可以求教位数的水仙花有哪些?
            或提个建议,怎么实现?  
    按你说的写了一个扩展算法,能够求任意位数的水仙花数,不过没有任何实用价值
    因为刚才看到你提出了这个设想就开始做了,可是却忽略了一点:水仙花数只有三位数的有
    不过既然写了还是贴出来吧,重在思想:-)public class NewFlower {
    public static void main(String[] args) {
    if (args.length != 1 || Integer.parseInt(args[0]) < 1) {
    System.out.println("parameter error!");
    System.exit(-1);
    }
    int digit = 0;
    String str = "";
    String temp ;
    digit = Integer.parseInt(args[0]);
    for (int i = (int)Math.pow(10, digit-1); i < (int)Math.pow(10, digit); i++) {
    str = Integer.toString(i);
    int sun = 0;
    for(int j = 0; j < str.length(); j++) {
    temp = Character.toString(str.charAt(j));
    sun += (int)Math.pow(Integer.parseInt(temp), 3);
    }
    if(i==sun)
    System.out.println(i);
    }
    }
    }
      

  20.   

    集合类传的参数只能为对象,如果要把数字转换成字符串,最好的写法当然是:
    import java.util.Vector;
    public class  VectorDemo
    {public static void main(String [] args)
    {
    Vector v=new Vector();
    int i=100;
    v.add(""+i);
       
     } 
    }
    这其实也是利用到了强制转换。
      

  21.   

    int i = 100;
    String str = String.valueOf(i);
      

  22.   

    diaopeng(放飞自己) 是对的。由于字符串是静态的,i+" "过程中要在内存中产生三个String对象。
    而Integer.toString 和 String.valueOf都只产生一个,因此要比所谓“潇洒”方法至少快三倍。你们不妨自己跑一跑。
    long start1=System.currentTimeMillis();
    for(int i=0;i<500000;i++){
    String  s1=Integer.toString(i);
    }
    System.out.println("First Method:"+(System.currentTimeMillis()-start1));

    long start2=System.currentTimeMillis();
    for(int i=0;i<500000;i++){
    String s2=""+i;
    }
    System.out.println("Second Method:"+(System.currentTimeMillis()-start2));
    long start3=System.currentTimeMillis();
    for(int i=0;i<500000;i++){
    String s3=i+"";
    }
    System.out.println("Third Method:"+(System.currentTimeMillis()-start3));

    long start4=System.currentTimeMillis();
    for(int i=0;i<500000;i++){
    String s4=String.valueOf(i);
    }
    System.out.println("Fourth Method:"+(System.currentTimeMillis()-start4));
    所以说编程之道,贵在平实。所谓的花哨,“技巧”,最终都是害人害己。
      

  23.   

    xuse1兄说得有理, 学习了不过感觉学 java 的大多不重视效率, 一昧取巧, 根基却不稳, 呵呵.
      

  24.   

    i = 1;
    s = "" + i;
      

  25.   

    受教了
    用i+"",""+i 

    Integer.toString(i)和String.valueOf(i)
    的三倍左右
      

  26.   

    public static boolean checkSXH(int i)
    {
    char[] cs = String.valueOf(i).toCharArray();
    int value = 0;
    for (int j = 0 ; j < cs.length; j++)
    {
    value += Math.pow(cs[j],3);
    }
    return value == i;
    } public static strictfp void main(String[] arg) throws Exception
    {
    int m = 100;
    int n = 1000;
    for (int i = m; i < n; i++)
    {
    if (checkSXH(i))
    {
    System.out.println(i);
    }
    }
              }
      

  27.   

    value += Math.pow(cs[j],3); --> value += Math.pow(cs[j]-'0',3);