我正在考虑如何使用递归来查找数字的补码.例如,每个数字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){
}
Run Code Online (Sandbox Code Playgroud)
当你处理递归时,首先用英语(或你的母语:)编写算法很重要.
对于此任务,请考虑以下事项:
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;
}
Run Code Online (Sandbox Code Playgroud)
然后:
System.out.println(complement(1234)); // prints 8765
Run Code Online (Sandbox Code Playgroud)
这可以写得有点短:
public static int complement(int n) {
if (n < 10) {
return 9 - n;
}
return 10 * complement(n / 10) + 9 - n % 10;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |