数字转换问题 从键盘输入一个在1到10亿之前的任何一个数, 输出这个数的描述.比如6050, 输出six thousands and fifty.请朋友给出一点建议, 伪码就可以了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我写了一个,你自己再测试一下吧public class Digital { private final static long[][] VALUE = new long[][] { new long[] { 10000000000L, 1000000, 1000,}, new long[]{100 }, new long[] { 90, 80, 70, 60, 50, 40, 30, 20 }, new long[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 } }; private final static String[][] NAME = new String[][] { new String[] { "billion", "million", "thousand"},new String[]{ "hundred" }, new String[] { "ninety", "eighty", "seventy", "sixty", "fifty", "forty", "thirty", "twenty" }, new String[] { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" } }; public static String toVerbal(long value) { return deal(value); } private static String deal(long value) { if (value == 0) return ""; int s = size(value); if (s == 3) { for (int i = 0; i < VALUE[s].length; i++) { if (value == VALUE[s][i]) return NAME[s][i]+" "; } } if (s == 2) { for (int i = 0; i < VALUE[s].length; i++) { if (value == VALUE[s][i]) return NAME[s][i]; long temp = value / (VALUE[s][i]); if (temp > 0) { return NAME[s][i] +"-"+ deal(value % VALUE[s][i]); } } } if (s == 1) { if (value == 100) return "one " + NAME[s][0]; return deal(value / (VALUE[s][0])) + NAME[s][0] + " and " + deal(value % VALUE[s][0]); } if (s == 0) { for (int i = 0; i < VALUE[s].length; i++) { if (value == VALUE[s][i]) return "one "+NAME[s][i]+deal(value % VALUE[s][i]); long temp = value / (VALUE[s][i]); if (temp > 0) { return deal(temp) + NAME[s][i] +" "+ deal(value % VALUE[s][i]); } } } return ""; } private static int size(long value) { if (value >= 1000) return 0; if(value>=100)return 1; if (value >= 20) return 2; return 3; } public static void main(String[] args) { String s = Digital.toVerbal(1000); System.out.println(s); s = Digital.toVerbal(1234567890L); System.out.println(s); s = Digital.toVerbal(90000000000L); System.out.println(s); s = Digital.toVerbal(274350); System.out.println(s); s = Digital.toVerbal(84296); System.out.println(s); s = Digital.toVerbal(2510); System.out.println(s); }} 先创建一个类,然后建立几个代表个位,十位,等等的字符串数组比如:class Number {String[] gw = {"One","Two","Three","Four","Five","Six","Seven","Eight","Nine"};String[] sw = {"Ten","Twenty","Tirty","Fourty","Fifty","Sixty","Seventy","Eighty","Nighty"};}String[] elevenToNighteen ="Ten","Eleven","twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nighteen"};}public StringBuilder change(int num[]) { ...}}注解:因为百位以后可以复用前面的数组元素,所以不用为百位建立数组,比如 200 可以表示成为gw中的 Two,和hundred.11-19比较特殊,不能复用,所以单列出来,最后建立一个返回值为StringBuilder的change函数. public StringBuilder changeTo(int num) { int g,s,b,k; StringBuilder builder = new StringBuilder(); k = (num / 1000); b = (num - k * 1000) / 100; s = (num - k * 1000 - b * 100) / 10; g = (num - k * 1000 - b * 100 - s * 10); if (k > 1) { builder.append(single[k-1] + " "); builder.append("thousands"); if (b != 0 || s != 0 || g != 0) { builder.append(", "); } } else if (k == 1){ builder.append(single[0] + " "); builder.append("thousand"); if (b != 0 || s != 0 || g != 0) { builder.append(", "); } } if (b > 1) { builder.append(single[b-1] + " "); builder.append("hundreds "); if (s != 0 || g != 0) { builder.append("and "); } } else if (b == 1) { builder.append(single[0] + " "); builder.append("hundred "); if (s != 0 || g != 0) { builder.append("and "); } } if (s > 1) { builder.append(doubleDigit[s-2] + " "); } else if (s == 1) { builder.append(tenDigit[g] + " "); return builder; } if (g != 0) { builder.append(single[g-1]); } return builder; }我做到千,其他你可以自己推,方法是一样的 用java实现进制问题 java怎麽 解壓縮? 菜鸟求救GUI hibernate 多对多问题 请教一个问题,着急 JAVA菜鸟请教 傻傻的问:我经常看到一些类和方法都是没有见过的,假如我要编写一个要用到我没有见过的类或者方法时,我该怎么办啊? --------请问怎样为菜单项添加事件和事件的处理方法?------- 用jdbc对数据库进行插入操作出错了! 请问CMP中如何处理数据库自增字段呢? 学java过英语四级的请进来帮我看看这个页面考的是什么问题啊! 求助:Java发送Mail需要的所有类库和信息
new long[] { 10000000000L, 1000000, 1000,},
new long[]{100 },
new long[] { 90, 80, 70, 60, 50, 40, 30, 20 },
new long[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19 } }; private final static String[][] NAME = new String[][] {
new String[] { "billion", "million", "thousand"},new String[]{ "hundred" }, new String[] { "ninety", "eighty", "seventy", "sixty", "fifty",
"forty", "thirty", "twenty" }, new String[] { "one", "two", "three", "four", "five", "six",
"seven", "eight", "nine", "ten", "eleven", "twelve",
"thirteen", "fourteen", "fifteen", "sixteen", "seventeen",
"eighteen", "nineteen" } }; public static String toVerbal(long value) {
return deal(value);
} private static String deal(long value) {
if (value == 0)
return ""; int s = size(value);
if (s == 3) {
for (int i = 0; i < VALUE[s].length; i++) {
if (value == VALUE[s][i])
return NAME[s][i]+" ";
}
}
if (s == 2) {
for (int i = 0; i < VALUE[s].length; i++) {
if (value == VALUE[s][i])
return NAME[s][i];
long temp = value / (VALUE[s][i]);
if (temp > 0) {
return NAME[s][i] +"-"+ deal(value % VALUE[s][i]);
}
}
}
if (s == 1) { if (value == 100)
return "one " + NAME[s][0];
return deal(value / (VALUE[s][0])) + NAME[s][0] + " and "
+ deal(value % VALUE[s][0]);
}
if (s == 0) {
for (int i = 0; i < VALUE[s].length; i++) {
if (value == VALUE[s][i])
return "one "+NAME[s][i]+deal(value % VALUE[s][i]);
long temp = value / (VALUE[s][i]); if (temp > 0) {
return deal(temp) + NAME[s][i] +" "+ deal(value % VALUE[s][i]);
}
}
}
return "";
} private static int size(long value) {
if (value >= 1000)
return 0;
if(value>=100)return 1;
if (value >= 20)
return 2;
return 3;
} public static void main(String[] args) {
String s = Digital.toVerbal(1000);
System.out.println(s);
s = Digital.toVerbal(1234567890L);
System.out.println(s);
s = Digital.toVerbal(90000000000L);
System.out.println(s);
s = Digital.toVerbal(274350);
System.out.println(s);
s = Digital.toVerbal(84296);
System.out.println(s);
s = Digital.toVerbal(2510);
System.out.println(s);
}
}
class Number {
String[] gw = {"One","Two","Three","Four","Five","Six","Seven","Eight","Nine"};
String[] sw = {"Ten","Twenty","Tirty","Fourty","Fifty","Sixty","Seventy","Eighty","Nighty"};
}
String[] elevenToNighteen ="Ten","Eleven","twelve","Thirteen","Fourteen",
"Fifteen","Sixteen","Seventeen","Eighteen","Nighteen"};
}
public StringBuilder change(int num[]) {
...
}
}
注解:因为百位以后可以复用前面的数组元素,所以不用为百位建立数组,比如 200 可以表示成为gw中的 Two,和hundred.11-19比较特殊,不能复用,所以单列出来,最后建立一个返回值为StringBuilder的change函数.
public StringBuilder changeTo(int num) {
int g,s,b,k;
StringBuilder builder = new StringBuilder();
k = (num / 1000);
b = (num - k * 1000) / 100;
s = (num - k * 1000 - b * 100) / 10;
g = (num - k * 1000 - b * 100 - s * 10);
if (k > 1) {
builder.append(single[k-1] + " ");
builder.append("thousands");
if (b != 0 || s != 0 || g != 0) {
builder.append(", ");
}
} else if (k == 1){
builder.append(single[0] + " ");
builder.append("thousand");
if (b != 0 || s != 0 || g != 0) {
builder.append(", ");
}
}
if (b > 1) {
builder.append(single[b-1] + " ");
builder.append("hundreds ");
if (s != 0 || g != 0) {
builder.append("and ");
}
} else if (b == 1) {
builder.append(single[0] + " ");
builder.append("hundred ");
if (s != 0 || g != 0) {
builder.append("and ");
}
}
if (s > 1) {
builder.append(doubleDigit[s-2] + " ");
} else if (s == 1) {
builder.append(tenDigit[g] + " ");
return builder;
}
if (g != 0) {
builder.append(single[g-1]);
}
return builder;
}
我做到千,其他你可以自己推,方法是一样的