大整数相加
整体思想都是补零,如a:123,b:1,补零后a:123, b:001然后相加进位
java是前补零
c++是将数从个位存,剩下的默认为0
java实现
import java.math.BigInteger;
public class Q2 {
/*
* 两大数相加。
*/
/*
* 方法一:
* 用java.math.BigInteger类
* 注:必须是正整数相加
*/
public String m1(String a, String b){
BigInteger big1 = new BigInteger(a);
BigInteger big2 = new BigInteger(b);
return big1.add(big2).toString();
}
/*
* 方法二:
*/
public String m2(String a, String b){
int len1 = a.length();
int len2 = b.length();
int len = len1;
if(len1 > len2){
for(int i = 0; i < len1 - len2; i ++){
b = '0' + b;
}
len = len1;
}else if(len1 < len2){
for(int i = 0; i < len2 - len1; i ++){
a = '0' + a;
}
len = len2;
}
int c[] = new int[len];
int a1, b1;
int temp = 0;
String s = "";
for(int i = len - 1; i >= 0; i --){
//char转为int
a1 = Integer.valueOf(a.charAt(i)) - 48;
//法二:char转为int
//a1 = a.charAt(i) - '0';
b1 = Integer.valueOf(b.charAt(i)) - 48;
c[i] = (a1 + b1 + temp) % 10;
temp = (a1 + b1 + temp) / 10;
s = String.valueOf(c[i]) + s;
}
return s;
}
public static void main(String[] args){
Q2 q2 = new Q2();
String a = "99999999999999999999999999";
String b = "11111111111111111111111111111";
String s = q2.m1(a, b);
System.out.println(s);
String c = q2.m2(a, b);
System.out.println(c);
}
}
C++实现
#include<iostream>
using namespace std;
void main(){
char a[201], b[201];
int a1[201], b1[201];
memset(a1, 0, sizeof(a1));
memset(b1, 0, sizeof(b1));
cin >> a >> b;
int len1 = strlen(a);
int len2 = strlen(b);
int len = len1 > len2 ? len1 : len2;
int j = 0;
for(int i = len1 - 1; i >= 0; i --){
a1[j ++] = a[i] - '0';//a1从个位开始存放
}
j = 0;
for(i = len2 - 1; i >= 0; i --){
b1[j ++] = b[i] - '0';
}
int n = 0; //n表示进位
int temp;
for(i = 0; i < len; i ++){
temp = a1[i] + b1[i] + n;
a1[i] = temp % 10;
n = temp / 10;
}
if(n != 0){//表示最高位相加后的进位
cout << n;
}
for(i = len - 1; i >= 0; i --){//从高位开始输出
cout << a1[i];
}
cout << endl;
}