我试图把一个整数作为参数,然后使用递归将整数中的每个数字加倍。Java递归和整数双位数字
例如doubleDigit(3487)
将返回33448877
。
我被卡住了,因为我无法弄清楚如何读取数字中的每个数字。
我试图把一个整数作为参数,然后使用递归将整数中的每个数字加倍。Java递归和整数双位数字
例如doubleDigit(3487)
将返回33448877
。
我被卡住了,因为我无法弄清楚如何读取数字中的每个数字。
要做到这一点使用递归,使用模运算符(%),每次除以10,并向后积累您的结果字符串,直到您到达基本情况(0),在那里没有什么可以分开。在基本情况下,您只需返回一个空字符串。
String doubleDigit(Integer digit) {
if (digit == 0) {
return "";
} else {
Integer thisDigit = digit % 10;
Integer remainingDigits = (digit - thisDigit)/10;
return doubleDigit(remainingDigits) + thisDigit.toString() + thisDigit.toString();
}
}
这是完美的。这正是我正在寻找的!非常感谢你!我从来没有经常寻求编码方面的帮助,但是这个让我难住。非常感谢你! – Jeffrey 2011-03-08 01:19:12
您可以获得给定整数的String.valueOf(doubleDigit)
表示形式,然后使用Commons StringUtils(在我看来最简单)来操作String。
如果你需要返回在这一点上的另一个数值(而不是新创建/操纵的字符串),你可以做Integer.valueOf(yourString)
或类似的东西。
这里没有必要使用递归。
我不再是一个Java的家伙,但算法我可能会使用的近似值是这样的(在C#中的作品,应直接转化为Java):
int number = 3487;
int output = 0;
int shift = 1;
while (number > 0) {
int digit = number % 10; // get the least-significant digit
output += ((digit*10) + digit) * shift; // double it, shift it, add it to output
number /= 10; // move to the next digit
shift *= 100; // increase the amount we shift by two digits
}
这个解决方案应该工作,但现在我写了它的麻烦,我意识到将数字转换为字符串并操作它可能更清楚。当然,这会慢一些,但你几乎可以肯定不关心这样一个小的速度差:)
编辑: 好了,所以你必须使用递归。你已经接受了一个完全正常的答案,但这里是我的:)
private static long DoubleDigit(long input) {
if (input == 0) return 0; // don't recurse forever!
long digit = input % 10; // extract right-most digit
long doubled = (digit * 10) + digit; // "double" it
long remaining = input/10; // extract the other digits
return doubled + 100*DoubleDigit(remaining); // recurse to get the result
}
注意我切换到long
所以多带几个数字作品。
不幸的是我不得不使用递归,除此之外,你的代码是完美的,它的确有诀窍。我只是负责在这个上使用递归:/ – Jeffrey 2011-03-08 01:18:26
如果你正在寻找它返回一个长而不是一个字符串,你可以使用下面的下面的解决方案的解决方案(非常类似于克里斯,为0的假设为基础的情况下):
long doubleDigit(long amt) {
if (amt == 0) return 0;
return doubleDigit(amt/10) * 100 + (amt % 10) * 10 + amt % 10;
}
该函数当然受Java中的maximum size of a long的限制。
在构建Java程序时,我做了同样的问题。这是我的解决方案,适用于负数和正数(并返回0为0)。
public static int doubleDigits(int n) {
if (n == 0) {
return 0;
} else {
int lastDigit = n % 10;
return 100 * doubleDigits(n/10) + 10 * lastDigit + lastDigit;
}
不知道为什么你想使用递归的.. ..? – Blorgbeard 2011-03-08 00:23:57