题目描述
请设计一个算法完成两个超长正整数的加法。
接口说明/*
请设计一个算法完成两个超长正整数的加法。
输入参数:
String addend:加数
String augend:被加数
返回值:加法结果
*/public String AddLongInteger(String addend, String augend)
{
/*在这里实现功能*/
return null;
}
输入描述:
输入两个字符串数字
输出描述:
输出相加后的结果,string型
示例1
输入
复制
99999999999999999999999999999999999999999999999999 1
输出
复制
100000000000000000000000000000000000000000000000000
解题思路:这里需要考虑的问题就是如何处理两个数字相加之后的进位问题,通过定义一个整数POP来计算是否产生进位,如果产生了进位,则pop置位1,在每次相加之后将pop置位0,加完了同时拥有的位置之后再考虑多出来的高位部分,这里需要注意的问题就是从低位可能产生的进位问题。当最高位加完之后有可能还会继续有进位产生,所以遍历完之后需要判断pop是否为1,如果为1则继续加1,之后再反转我们所得到的字符串就可以得到正确的数字。
代码如下:
import java.util.Scanner;
/**
* Created with IntelliJ IDEA
* Description:
* User:Light_Long
* Date:2019-07-15
* Time:11:36
*/
public class Main1 {
public String AddLongInteger(String addend,String augend){
String longstr1 = null; //记录更长的数字
String shortstr2 = null; //记录更短的数字
StringBuilder str = new StringBuilder();
if(addend.length() > augend.length()){
longstr1 = addend;
shortstr2 = augend;
}else{
longstr1 = augend;
shortstr2 = addend;
}
int pop = 0; //进位标记
int nums1 = 0; //获取两数相同位置的数字
int nums2 = 0; //获取两数相同位置的数字
for (int i = 0; i < shortstr2.length(); i++) { //存在相同的位数先进行相加
nums1 = Integer.parseInt
(String.valueOf(longstr1.charAt(longstr1.length() - 1 - i)));
nums2 = Integer.parseInt
(String.valueOf(shortstr2.charAt(shortstr2.length() - 1 - i)));
int sum = nums1 + nums2 + pop;
pop = 0; //进位标记清0
if(sum >= 10){ //如果想加之后大于等于10则产生进位
pop = 1; //进位标记置位1
}
str.append(sum % 10); //获取个位上的余数
}
for (int i = shortstr2.length(); i < longstr1.length(); i++) { //没有数字可加的高位数字
nums1 = Integer.parseInt
(String.valueOf(longstr1.charAt(longstr1.length() - 1 - i)));
nums2 = nums1 + pop; //依旧需要判断进位问题,有可能从低位过来的进位
pop = 0;
if(nums2 >= 10){
pop = 1;
}
str.append(nums2 % 10);
}
if(pop == 1){
str.append(pop); //最高位还存在进位,则只有可能是1,所以如果有进位直接加
}
str.reverse(); //得到的数字为逆序的,所以反转之后为正确的数字
return str.toString();
}
public static void main(String[] args) {
Main1 main = new Main1();
Scanner in = new Scanner(System.in);
while(in.hasNextLine()){
String str1 = in.nextLine();
String str2 = in.nextLine();
String str3 = main.AddLongInteger(str1,str2);
System.out.println(str3);
}
}
}