如何在没有Java递归方法的情况下减少两位数的给定数字?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (62)

这是我试图解决的问题。鉴于像6928这样的数字:

difference between 6 and 9 is 3
difference between 9 and 2 is 7
difference between 2 and 8 is 6

因此,简化形式为376.由于这不是两位数,我们重复这个过程:

difference between 3 and 7 is 4
difference between 7 and 6 is 1

结果是41,这是一个两位数的数字。

这是使用递归方法的尝试,但我希望以非递归方式执行此操作:

public static int twodigit(int value) {
    while (value > 99)
        value = reduce(value);
    return value;
}
private static int reduce(int value) {
    return (value<=9? 0:reduce(value/10)*10 + Math.abs(value/10%10-value%10));
}  
提问于
用户回答回答于

更简单的迭代方法是将数字转换为字符串,并将其传递给下面的方法。

private static String calculateTwoDigitNumber(String number) {
    while (number.length() > 2) {
        String tmpNumber = "";
        for (int i = 1; i < number.length(); i++) {
            tmpNumber += Math
                    .abs(Integer.parseInt(number.charAt(i - 1) + "") - Integer.parseInt(number.charAt(i) + ""));
        }
        number = tmpNumber;
    }
    return number;
}

如果输入字符串很大,可以使用StringBuilder代替String

用户回答回答于

你可以使用两个嵌套循环和一些数学来添加和选择数字。

public static void main(String[] args) {
    System.out.println(reduce(6928));
}

public static long reduce(long v) {
    while(v > 9) {
        System.out.println(v);
        long y = 0, factor = 1;
        // go through each digit from the bottom and calc the diff.
        while(v > 9) {
             y += factor * Math.abs(v % 10 - v / 10 % 10);
             v /= 10;
             // each digit is worth 10x the last.
             factor *= 10;
        }
        v = y;
    }
    return v;
}

打印:

6928
376
41
3

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励