从键盘输入一个在1到10亿之前的任何一个数, 输出这个数的描述.
比如6050, 输出six thousands and fifty.请朋友给出一点建议, 伪码就可以了

解决方案 »

  1.   

    我写了一个,你自己再测试一下吧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);
    }
    }
      

  2.   

    先创建一个类,然后建立几个代表个位,十位,等等的字符串数组比如:
    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函数.
      

  3.   


    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;
    }
    我做到千,其他你可以自己推,方法是一样的