我正在考虑如何使用递归来查找数字的补码。
例如,数字的每个数字x
必须变为9 - x
,因此1234 -> 8765
。
我真的不敢想如何做到这一点。到目前为止,这是我的代码:
public static int complement(int n){
int x = n % 10;
x = x - 9;
n = (n / 10)
return complement(n,x);
}
public static int complement(int n ,int times){
}
答案 0 :(得分:5)
当你处理递归时,首先用英语(或你的母语:)编写算法是很重要的。)
对于此任务,请考虑以下事项:
n
。让我们取最后一位数字并将该数字减去9。n / 10
。得到的结果,我们需要再次输入一个数字:所以我们将结果乘以10并加上我们之前计算的数字。换句话说,complement(n / 10)
返回数字n
的补码而没有最后一位数字,因此我们需要将最后一位数的补码附加到此。9 - n
(这是基本情况,数字只有一位数)。在代码中,这实现为:
public static int complement(int n) {
if (n < 10) {
return 9 - n;
}
int x = n % 10;
x = 9 - x;
return 10 * complement(n / 10) + x;
}
然后:
System.out.println(complement(1234)); // prints 8765
这可以写得更短:
public static int complement(int n) {
if (n < 10) {
return 9 - n;
}
return 10 * complement(n / 10) + 9 - n % 10;
}