描述:
题目描述:请设计一个算法完成两个超长正整数的加法。
要求实现函数:
void AddLongInteger(char * pcAddend, char * pcAugend, char * pcAddResult);
输入参数:
char * pcAddend:加数
char * pcAugend:被加数
char * pcAddResult:加法结果
返回值:无
运行时间限制: 1 Sec
内存限制: 128 MByte
输入:
两个超长正整数的字符串
输出:
相加后结果的字符串
样例输入:
123456789123456789 123456789123456789
样例输出:
246913578246913578
我的答案(Java):
import java.util.Scanner;
public class Main{
private String a;//
private String b;
/**
* 输入
*/
public void input(){
Scanner sc=new Scanner(System.in);
try {
a=sc.next();// 加数
b=sc.next();// 被加数
} catch (Exception e) {
a=null;
b=null;
}finally{
sc.close();
}
}
public String AddLongInteger(String a,String b){
String result="0";
int carry=0;
int len1=a.length();
int len2=b.length();
int len=Math.max(len1, len2);
for(int i=0;i<len;i++){
try{
// 加数取一位
int num1=0;
int idx1=len1-i-1;
if(idx1>-1){
num1=Integer.parseInt(a.substring(idx1, idx1+1));
if(num1==0)
return null;
}
// 被加数取一位
int num2=0;
int idx2=len2-i-1;
if(idx2>-1){
num2=Integer.parseInt(b.substring(idx2, idx2+1));
if(num2==0)
return null;
}
// 判断结果中是否包含进位
int idx3=0;
if(carry>0){
idx3=1;
}
// System.out.println("num1="+num1+" num2="+num2+" result="+result);
int tempResult=num1+num2+carry;
carry = tempResult >= 10 ? 1 : 0;// 新的进位
if(result.equals("0"))
result=tempResult+"";
else{
result=tempResult+result.substring(idx3, result.length());
}
}catch(Exception e){
// e.printStackTrace();
return null;
}
}
return result;
}
public static void main(String[] args){
Main m=new Main();
m.input();
if(m.a==null||m.b==null){
return;
}
String result=m.AddLongInteger(m.a, m.b);
if(result!=null){
System.out.println(result);
}
}
}
test1测试没有通过,我还没发现问题在哪儿,请高手指点。