问题描述
- java编写一个算法,一个数用数组表示,执行加1操作,之后的数组用一个数表示。
-
用java编写一个算法,一个数用数组表示,执行加1操作,之后的数组用一个数表示。
解决方案
数组可以表示很多数的…你说,用一个数表示啥意思??
解决方案二:
你应该是想要下面的实现。如果有用请采纳。
import java.util.ArrayList;
import java.util.List;
public class TestMain {
public static void main(String[] args) {
// 递归实现,10进制累加
// 数:123,累加次数(加1):878
System.out.println(new TestMain().startIncrement(123, 878));
}
public int startIncrement(int value, int incrementCount) {
// 把一个数份成数组表示,从低位到高位顺序存储
String[] ss = String.valueOf(value).split("");
List<Integer> list = new ArrayList<Integer>();
for (int i = ss.length - 1; i >= 0; i--) {
if (!ss[i].isEmpty()) {
list.add(Integer.valueOf(ss[i]));
}
}
// 累加N回
int retValue = 0;
while (incrementCount > 0) {
incrementCount--;
// 递归实现,从低位开始加算(最低位index:0)
retValue = increment(list, 0);
}
return retValue;
}
// 递归方法(1次加1动作)
public int increment(List<Integer> list, int index) {
// 进位时,没有超过最高位
if (list.size() > index) {
// 求10进制余数
int mod = (list.get(index).intValue() + 1) % 10;
// 余数分配给当前位
list.set(index, Integer.valueOf(mod));
// 余数是0,说明有进位,则向高位递归
if (mod == 0) {
increment(list, ++index);
}
} else {
// 进位时,超过最高位,追加一个最高位
list.add(new Integer(1));
}
// 1次加1动作后的结果,从高位到低位连接后,再变换成数值
StringBuilder sb = new StringBuilder();
for (int i = list.size() - 1; i >= 0; i--) {
sb.append(list.get(i));
}
return Integer.parseInt(sb.toString());
}
}
时间: 2024-09-19 10:04:18