我看到这个问题已发布,但卡住了,需要一些帮助才能完成。该程序用于使用用户输入的任何基数从一个数字计数到另一个数字。
示例:如果用户输入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));
}
答案 0 :(得分:3)
你几乎就在那里,但你的想法在基本情况下变得模糊。假设你正在使用基数10和数字0123456789
,到目前为止你的算法是这样做的:
if
)如果最后一位数字不是9,则在最后一位数字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 = 0123456789
,num = 99
,则nextNum = 100
。如果是base = 0123456789
,num = 9
,那么nextNum = 10
。