Java - 用各种基数计数的自然数

时间:2016-03-15 05:34:55

标签: java

我看到这个问题已发布,但卡住了,需要一些帮助才能完成。该程序用于使用用户输入的任何基数从一个数字计数到另一个数字。

示例:如果用户输入5& 10将以0123456789为基础输出 5 6 7 8 9 10

从我到目前为止,我可以输入5并获得下一个数字6.但是9到10没有用,只给我0.当我输入19时我得到20.当我输入99时我只得到00。

所以我需要的是修复9到10和99到100

static String nextNum(String base, String n) {
    int i = n.length() - 1;
    char digit = n.charAt(i)
    int pos = base.indexOf(digit);
    if (pos + 1 < base.length()) {
        n = n.substring(0, i) + base.charAt(pos + 1);
    } else if (i > 0) {
        n = nextNum(base, n.substring(0, i)) + base.charAt(0);
    } else if (pos == base.length() - 1) {
        n = n.substring(0, i) + base.charAt(0) + n.substring(i + 1);
    } else {
        n = "" + base.charAt(1) + base.charAt(0);
    }

    return n;
}

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    System.out.print("Please enter base: ");
    String base = input.nextLine();
    System.out.print("Please enter first number: ");
    String n = input.nextLine();
    System.out.print("Please enter second number: ");
    String m = input.nextLine();

    System.out.println(nextNum(base, n));

}

2 个答案:

答案 0 :(得分:3)

你几乎就在那里,但你的想法在基本情况下变得模糊。假设你正在使用基数10和数字0123456789,到目前为止你的算法是这样做的:

  1. (first if)如果最后一位数字不是9,则在最后一位数字
  2. 上加一位
  3. (first else if)如果最后一个数字是9且字符串的长度至少为2,则使用递归将一个字符串添加到不带最后一个字符串的字符串中,并在末尾附加一个0。 / LI>

    到目前为止,很棒。如果这两者都不成立,则只剩下一种可能性(假设输入有效):字符串为"9"。鉴于那时只有一个可能的字符串,你不应该有另一个else if;问题应该比你做的简单得多。我会让你解决剩下的问题。

答案 1 :(得分:0)

我记得曾经发布了一个概念,即在一段时间内添加2个用字符串表示的数字。我正在添加我在答案中提到的简化版本。用户ajb的评论是关于你正在采取的方法。所以,我不会重复同样的事情。

static String nextNum(String base, String n) {
    // 2 cases
    // one requires carry over
    if(n.charAt( n.length() - 1 ) == base.charAt( base.length()-1 ) ) {

        // note: carry is set to 1
        int last = n.length() - 1, carry = 1;

        int systemBase = base.charAt(base.length() - 1) - '0';
        systemBase++;       // equals 10 for base=0123456789
                            // equals 4 for base=0123

        String newString = "";
        int curIndx = n.length() - 1;
        while(curIndx >= 0) {
            int digit = n.charAt(curIndx) - '0';

            // add carry over value
            digit += carry;

            carry = digit / systemBase;
            digit = digit % systemBase;

            newString = digit + newString;

            curIndx--;
        }
        //if there is something left in carry
        if(carry != 0)
            newString = carry + newString;

        return newString;
    } 
    // no carry over
    else {
        // just need to add one to last character
        // increment last character by 1
        int last = n.charAt(n.length() - 1) - '0';  // actual value of last
        last++;                                     // increment by 1
        return ( n.substring(0, n.length()-1) + last );
    }
}       

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    System.out.print("Please enter base: ");
    String base = input.nextLine();
    System.out.print("Please enter first number: ");
    String n = input.nextLine();         

    System.out.println(nextNum(base,n));        

}

如果base = 0123456789num = 99,则nextNum = 100。如果是base = 0123456789num = 9,那么nextNum = 10