题目描述:
* 题目描述:请设计一个算法完成两个超长正整数的加法。
要求实现函数:
void AddLongInteger(char * pcAddend, char * pcAugend, char * pcAddResult);
输入参数:
char * Addend:加数
char * Augend:被加数
char * AddResult:加法结果
返回值:无
输入:
两个超长正整数的字符串
输出:
相加后结果的字符串
样例输入:
123456789123456789 123456789123456789
样例输出:
246913578246913578
代码实现:
import java.util.Arrays;
import java.util.Scanner;
/**
* 题目描述:请设计一个算法完成两个超长正整数的加法。
要求实现函数:
void AddLongInteger(char * pcAddend, char * pcAugend, char * pcAddResult);
输入参数:
char * Addend:加数
char * Augend:被加数
char * AddResult:加法结果
返回值:无
*
*/
public class SuperLongNumAdd {
public static char[] toSameLength(char[] lessCharArr,int length,int dis){
int j=0;
char[] temp=new char[length];
for (int i = 0; i < length; i++) {
if(i<dis)
temp[i]=48;
else{
temp[i]=lessCharArr[j];
j++;
}
}
return temp;
}
public static String AddLongInteger(String pcAddend,String pcAugend){
if(pcAddend==null||pcAugend==null)
return null;
char[] Addend=pcAddend.toCharArray();
char[] Augend=pcAugend.toCharArray();
char[] AddResult;
int length1=Addend.length;
int length2=Augend.length;
int length=length1>length2?length1:length2;
char[] temp=new char[length];
AddResult=new char[length];
if(length1>=length2){
Augend=toSameLength(Augend,length,length1-length2);
}else{
Addend=toSameLength(Addend,length,length2-length1);
}
//相加
int add=0;//进一位
temp=new char[length+1];
int i=0;
temp[0]=48;
for (i = temp.length-1; i >=0; i--) {
if(i-1==-1&&add==0)
break;
else if(i-1==-1&&add==1){
temp[i]=49;
break;
}
int a=Augend[i-1]-48;
int b=Addend[i-1]-48;
int result=a+b;
//进位
if(add==1){
result+=1;
}
if(result>=10){
add=1;
temp[i]=(char) ((result-10)+48);
}else{
add=0;
temp[i]=(char) (result+48);
}
}
if(temp[0]!=48){
AddResult=temp;
}else{
AddResult=Arrays.copyOfRange(temp, 1, temp.length);
}
String pcAddResult=String.valueOf(AddResult);
return pcAddResult;
}
public static boolean validInput(String input){
if(input==null||"".equals(input))
return false;
for (int i = 0; i < input.length(); i++) {
if(input.charAt(i)<48||input.charAt(i)>57)
return false;
}
return true;
}
public static void main(String[] args) {
String Addend;
String Augend;
String AddResult;
Scanner cin=new Scanner(System.in);
Addend=cin.next();
Augend=cin.next();
cin.close();
if(validInput(Addend)&&validInput(Augend)){
AddResult=AddLongInteger(Addend,Augend);
System.out.println(AddResult);
}
return;
}
}