您的位置:首页 > 编程语言 > Java开发

华为机试——两个超长正整数的加法 java

2015-08-09 16:16 615 查看
题目描述:请设计一个算法完成两个超长正整数的加法。

要求实现函数:

void AddLongInteger(char * pcAddend, char * pcAugend, char * pcAddResult);

输入参数:

char * pcAddend:加数

char * pcAugend:被加数

char * pcAddResult:加法结果

返回值:无
运行时间限制:1 Sec
内存限制:128 MByte
输入:两个超长正整数的字符串
输出:相加后结果的字符串
样例输入:
123456789123456789 123456789123456789

样例输出:
246913578246913578

[java] view
plaincopy

import java.util.Arrays;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner sc = new Scanner(System.in);

char[] a1 = sc.next().toCharArray();

char[] a2 = sc.next().toCharArray();

char[] result = AddLongInteger(a1,a2);

for(int i = 0;i < result.length;i++){

System.out.print(result[i]);

}

}

/*

* AddLongInteger(char[] a1, char[] a2)的思想:

* 首先:a1[0]对应的是第一个被加数的最高位,a2[0]同样,所以做加法的时候应该从a1[a1.length-1]位开始,或者将a1前后转置

* 然后加法的计算是:(a1[1]+a2[1]+进位)%10 进位=(a1[1]+a2[1]+进位)/10

* 然后就是字符与数字之前的转换,千万不要搞混

*/

public static char[] AddLongInteger(char[] a1, char[] a2){

int len=0;

if(a1.length > a2.length){

len = a1.length + 1;

}else{

len = a2.length + 1;

}

char[] temp = new char[len];

char[] result;

char[] b1 = new char[a1.length];

char[] b2 = new char[a2.length];

for(int i = 0;i < a1.length;i++){

b1[a1.length - 1 - i] = a1[i];

}

for(int i = 0;i < a2.length;i++){

b2[a2.length - 1 - i] = a2[i];

}

for(int i = 0; i < temp.length; i++){

temp[i] = '0';

}

for(int i = 0; i < len-1;i++){

int res = 0;

if(b1.length -1 - i >=0 && b2.length -1 - i >= 0){

res = b1[i] - '0' + b2[i] - '0';

}else if(b1.length -1 - i >= 0 && b2.length -1 - i < 0){

res = b1[i] - '0';

}else if(b1.length -1 - i < 0 && b2.length -1 - i >= 0){

res = b2[i] - '0';

}

int value = temp[i]-'0'+res;

temp[i] = (char) (value%10 + '0') ;

temp[i+1] += value/10;

// System.out.println(temp[i]);

// System.out.println(temp[i+1]);

}

while(temp[len - 1] == '0'){

len--;

}

result = new char[len];

int s = result.length;

for(int i = 0;i < s; i++){

result[s-1-i] = temp[i];

}

return result;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: