大整数相加
整体思想都是补零,如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; }