关于水仙花数的一个改进问题,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);
}
}
}
自己想了一个方法,借助字符串来实现,这样是不是就可以利用"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);
}
}
}
int i = 1000 ;String iStr = Integer.toString(i);
把r整成t了,呵呵,应该是笔误吧
int i1=2; s1+i1可以直接用的,编译器会自动转化的为类似一楼的的写法 当然1楼的是Java比较标准的写法
String str = ""+i;
String iStr = Integer.toString(i);
很正规的写法int i = 1000;
String str = ""+i;
很潇洒的写法
String s= Integet.toString(i);
和一楼的一样
String iStr = Integer.toString(i);
很正规的写法int i = 1000;
String str = ""+i;
很潇洒的写法
完全正确
String str = ""+i;学习。。
String iStr = Integer.toString(i);
很正规的写法
-----------------------------
UP
----------------------------------
是我选这个.
int i = 1000;
String str = ""+i;
----------------------------------
这方法的确见有人这么写过。
----------------------------------
是我选这个.
int i = 1000;
String str = ""+i;
----------------------------------
两种方法 不同的书都用过~
String str = String.valueOf(i);
int i=1234;
String str=i+" ";
就OK了
String str = ""+i;这是最不可取的方法,一是字面意义不明,二是性能不好,因为字符串对象是常量的,所以使用字符串连接会产生多余的对象,耗费内存。
Integer.toString(i)是最合适的。
恩,回答的挺全的,呵呵。
哪位有时间写一个求水仙花的改进算法吗?
能够根据输入的位数来求该水仙花。
如:输入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);
}
}
}
import java.util.Vector;
public class VectorDemo
{public static void main(String [] args)
{
Vector v=new Vector();
int i=100;
v.add(""+i);
}
}
这其实也是利用到了强制转换。
String str = String.valueOf(i);
而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));
所以说编程之道,贵在平实。所谓的花哨,“技巧”,最终都是害人害己。
s = "" + i;
用i+"",""+i
是
Integer.toString(i)和String.valueOf(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);
}
}
}