0
点赞
收藏
分享

微信扫一扫

笔试算法《高精度整数运算》


描述
输入两个用字符串表示的整数,求它们所表示的数之和。
字符串的长度不超过10000。
本题含有多组样例输入。
输入描述:
输入两个字符串。保证字符串只含有’0’~'9’字符

输出描述:
输出求和后的结果

示例1
输入:
9876543210
1234567890

输出:
11111111100

代码

public class Huawei高精度整数加法 {

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String a = null;
StringBuilder stringBuilder = new StringBuilder();
while ((a = br.readLine()) != null) {
String b = br.readLine();
char[] aChars = a.toCharArray();
char[] bChars = b.toCharArray();
List<Integer> aList = new LinkedList<>();
for (int i = aChars.length - 1; i >= 0; i--) {
aList.add(aChars[i] - '0');
}
int index = bChars.length - 1;
int i;
for (i = 0; i < aList.size(); i++) {
//aChars还没有运算完,继续运算
if (index < 0) {
Integer v = aList.get(i);
if (v >= 10) {
carry(aList, i, v);
}
} else {
int t = aList.get(i) + (bChars[index] - '0');
index--;
if (t >= 10) {
carry(aList, i, t);
} else {
aList.set(i, t);
}
}
}
//bChars还没有运算完,继续运算
while (index >= 0) {
Integer v = aList.get(i - 1);
if (v >= 10) {
carry(aList, i, v);
} else {
aList.add(i, (bChars[index] - '0'));
}
i++;
index--;
}

for (int j = aList.size() - 1; j >= 0; j--) {
stringBuilder.append(aList.get(j));
}
stringBuilder.append("\n");
}
System.out.println(stringBuilder.toString());
}

/**
* 进位运算
*
* @param aList
* @param i
* @param t
*/
private static void carry(List<Integer> aList, int i, int t) {
int mod = t % 10;
int n = t / 10;
aList.set(i, mod);
if (i + 1 >= aList.size()) {
aList.add(n);
} else {
Integer integer = aList.get(i + 1);
aList.set(i + 1, n + +integer);
}
}
}


举报

相关推荐

0 条评论