BigInteger a=new BigInteger("65650505005050205020502");
BigInteger b=new BigInteger("65650505005050205020503"); 加法: a.add(b);
减法: a.subtract(b);
乘法: a.multiply(b);
除法: a.divide(b);  
以前看到了大数的运算,很多人说可以用String,我今天尝试了,可要怎么写啊,谁能告诉我一下啊
String  a ="65650505005050205020502";
String  b="65650505005050205020503";
String  c="a"+"b";
System.out.println(c);

解决方案 »

  1.   

    用string的话可以从低位向高位遍历,每位的和是对应位相加再加上进位
      

  2.   

    写了个加法的,效率不高,高手请挑挑错
    package com.travelsky;import java.io.*;
    import java.util.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.util.*;public class hello {
    public String add(String a, String b){
    String value = "";
    int flag = 0; //进位标志
    int flag_len = 0;//标示哪个字符串长度,1表示a长度大于b,0表示b长度大于a
    int len = 0;//两个字符串中短的那个的长度

    if(a.length() >= b.length()){
    len = b.length();
    flag_len = 1;
    }else{
    len = a.length();
    flag_len = 0;
    }

    int v = a.length()+b.length()-2*len;

    if(flag_len == 1){
    for(int i=len-1; i>=0; --i){
    int ch = a.charAt(i+v)+b.charAt(i);
    if(ch > 105){
    value = (char)(ch-58+flag) + value;
    flag = 1;
    }else{
    value = (char)(ch-48+flag) + value;
    flag = 0;
    }
    }
    if(flag == 1){
    return add(a.substring(0,v),"1") + value;
    }else{
    return a.substring(0,v)+value;
    }
    }else{
    for(int i=len-1; i>=0; --i){
    int ch = a.charAt(i)+b.charAt(i+v);
    if(ch > 105){
    value = (char)(ch-58+flag) + value;
    flag = 1;
    }else{
    value = (char)(ch-48+flag) + value;
    flag = 0;
    }
    }
    if(flag == 1){
    return add(b.substring(0,v),"1") + value;
    }else{
    return b.substring(0,v) + value;
    }
    }
    }
    public static void main(String[]args) {
    String s1 = "65650505005050205020502";
    String s2 = "65650505005050205020503";
    hello h = new hello();

    System.out.println(h.add(s1, s2));
    }
    }
      

  3.   

    应该能用的package suanfa;public class DaShuWenTi {

        /*超过Long类型的大数的加法运算,使用String类型来记录结果,
         * 返回两个数字相加的和,参数作为String类型进行传递
         **/

    public static String jiaFaYunSuan(String str1, String str2) {

    String dashujieguo = "";

    int a = Math.max(str1.length(), str2.length());

    if (a == str1.length()) {

    for (int i = a - str2.length(); i >= 0; i--) {
    str2 = "0" + str2;
    }
    str1 = "0" + str1;

    else if (a == str2.length()) {
    for (int i = a - str1.length(); i >= 0; i--) {
    str1 = "0" + str1;
    }
    str2 = "0" + str2;
    } int[] shuzu = new int[str1.length()];
    int[] shuzu2 = new int[str2.length()];
    int[] shuzu3 = new int[str2.length()]; for (int i = 0; i < shuzu.length; i++) {
    shuzu[i] = Integer.parseInt(str1.charAt(i) + "");
    shuzu2[i] = Integer.parseInt(str2.charAt(i) + "");
    }

    for (int i = shuzu.length - 1; i >= 0; i--) {
    if (i == shuzu.length - 1) {
    int k = shuzu[i] + shuzu2[i];
    shuzu3[i] = (k >= 10) ? k - 10 : k;
    }
    else {
    if (shuzu[i + 1] + shuzu2[i + 1] >= 10) {
    int k = shuzu[i] + shuzu2[i] + 1;
    shuzu3[i] = (k >= 10) ? k - 10 : k;

    else {
    int k = shuzu[i] + shuzu2[i];
    shuzu3[i] = (k >= 10) ? k - 10 : k;
    }
    }
    }

    for (int i = 0; i < shuzu3.length; i++) {
    if (i == 0) {
    if (shuzu3[i] == 0)
    continue;

    else {
    dashujieguo += shuzu3[i];
    } }
    return dashujieguo;
    }
    }