大数问题
Leetcode对这道题简化了 这道题不用大数就没有意义
//大数 字符串的加法
public class PrintNumbers {
public void printNumbers(int n) {
StringBuilder stringBuilder = new StringBuilder();
//先初始化字符串 n位全为0的字符串
for (int i = 0; i < n; i++) {
stringBuilder.append('0');
}
while (!increment(stringBuilder)) {
//去掉0
int index = 0;
while (index < stringBuilder.length() && stringBuilder.charAt(index) == '0') {
index++;
}
//打印从去掉0的位置开始的后面的字符串
System.out.println(stringBuilder.toString().substring(index));
}
}
public boolean increment(StringBuilder str) {
//判断是否溢出
boolean isOverFlow = false;
//从字符串末尾开始(因为需要进位)
for (int i = str.length() - 1; i >= 0; i--) {
//当前位置 +1
char s = (char) (str.charAt(i) + 1);
//判断是否大于9 大于9 需要进位
if (s > '9') {
//如果当前大于9的位置是字符串的首位 那么就已经溢出了
if (i == 0) {
isOverFlow = true;
}
//否则将末尾字符串替换成0
str.replace(i, i + 1, "0");
} else {
//不大于9 当前位置替换成 s
str.replace(i, i + 1, String.valueOf(s));
break;
}
}
//返回是否移除
return isOverFlow;
}