两个超长正整数的加法

来源:互联网 发布:php 编译 mysqli 编辑:程序博客网 时间:2024/05/01 10:03

题目描述:

     * 题目描述:请设计一个算法完成两个超长正整数的加法。 
要求实现函数:
  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;}}


0 0