public static void main(String[] args) {
        String data1 = "123456789";
        String data2 = "987654321";
        String result = add(data1,data2);
        System.out.println(result);
}
要求:实现add()方法,不能使用BigInteger或者BigDecimal这样的类当时时间紧,有点紧张,实现的有点笨,诸位有没有好一点的实现方式?

解决方案 »

  1.   


    public static String add(String data1,String data2){
            int len1 = data1.length();
            int len2 = data2.length();
            int len = len1>len2?len1:len2;
            while(len1++ < len){
                data1 = "0" + data1;
            }
            while(len2++ < len){
                data2 = "0" + data2;
            }
            int arr[] = new int[len];
            for(int i=0;i<len;i++){
                arr[i] = data1.charAt(i) - '0' + data2.charAt(i) - '0' ;
            }
            for(int i=len-1;i>0;i--){
                int jinWei = arr[i]/10;
                arr[i] = arr[i]%10;
                arr[i-1] = arr[i-1] + jinWei;
            }
            StringBuffer sb = new StringBuffer();
            if(arr[0]>=10){
                sb.append(arr[0]/10);
                sb.append(arr[0]%10);
            }else{
                sb.append(arr[0]);
            }
            for(int i=1;i<len;i++){
                sb.append(arr[i]);
            }
            return sb.toString();
        }
      

  2.   

    public class Test {
    public static void main(String[] args) {
    String data1 =   "3435652334";
            String data2 = "443585969687";
            String result = add(data1,data2);
            System.out.println(result);
    }

    public static String add(String str1, String str2) {
    int carry = 0;
    StringBuilder result = new StringBuilder();
    for (int i = 0 ; i < str1.length() || i < str2.length(); ++i) {
    int v1 = intAt(i, str1);
    int v2 = intAt(i, str2);
    int sum = v1 + v2 + carry;

    carry = sum / 10;
    result.append(sum % 10);
    }

    return result.reverse().toString();
    }

    // 从后往前取数字
    public static int intAt(int index, String str) {
    if (index < str.length()) {
    return Integer.parseInt(str.charAt(str.length() - index - 1) + "");
    }
    return 0;
    }
    }
      

  3.   

    如果考虑到效率的话,不一定要1位1位地处理,可以一段一段地(不超过long的长度)处理。
      

  4.   


    public static String add(String s1, String s2) {
    BigDecimal bd1 = new BigDecimal(s1);
    BigDecimal bd2 = new BigDecimal(s2);
    BigDecimal result = bd1.add(bd2);
    return result.toString();
    }
      

  5.   

    哦,不能使用BigDecimal,没看见
      

  6.   

     不太明白意思
    要求的结果是什么?
    public static String add(String da, String de) { return da + de;
    }
      

  7.   

    //for循环后面添加下面一句话就可以了
    if(carry > 0 ){
          result.append(carry);
    }
      

  8.   

    写错啦for (int i = 0 ; i < str1.length() || i < str2.length(); ++i) {
                int v1 = intAt(i, str1);
                int v2 = intAt(i, str2);
                int sum = v1 + v2 + carry;
                
                carry = sum / 10;
                result.append(sum % 10);
            }
            if(carry!=0) {
                result.append(carry);
             }
            return result.reverse().toString();
      

  9.   


    String a="12345678987654";
    String b="987654326784";
    long[] a1=new long[a.length()/9];  
     //因为long可以存放10^19位以上的数,控制每个数组元素小于10^9才能保证两个数组元素相乘时不溢出
    long[] b1=new long[b.length()/9];通过截取字符串然后转化成long型数的方式得到下面结果
    a1={678987654,12345};
    b1={654326784,987};
    long[] result=new long[a1.length+b1.length];
    然后采用两个for循环对应位相乘,例如a1[i]*b1[k]的结果放入result[i+k]中,同时要注意保持result[i+k]的值不能超过10^9,若超过的话就向result[i*k+1]进位
      

  10.   

    String  add(String a,String b)
        {
         int  x=Integer.parseInt(a);
         int y=Integer.parseInt(b);
        
         return    new  Integer(x+y).toString();
        
        }
      

  11.   


    public class Test { public static void main(String[] args) {
    String data1 = "123456789";
    String data2 = "987654321";
    System.out.println(add(data1, data2));
    }

    public static String add(String data1, String data2) {
    int length1 = data1.length();
    int length2 = data2.length();
    int length = Math.max(length1, length2);

    int[] a1 = new int[length];
    int[] a2 = new int[length];

    int i;
    for(i=0; i<length1 && i<length2; i++) {
    a1[length-length1+i] = data1.charAt(i)-'0';
    a2[length-length2+i] = data2.charAt(i)-'0';
    }
    while(i<length1) {
    a1[length-length1+i] = data1.charAt(i)-'0';
    i++;
    }

    while(i<length2) {
    a2[length-length2+i] = data2.charAt(i)-'0';
    i++;
    }

    int[] res = new int[length +1];
    for(i=length-1; i>=0; i--) {
    res[i+1] = a1[i]+a2[i];
    }

    for(i=res.length-1; i>0; i--) {
    if(res[i]>=10) {
    res[i] %= 10;
    res[i-1] += 1;
    }
    }
    StringBuilder sb = new StringBuilder();
    if(res[0] != 0)
    sb.append(res[0]);
    for(i=1; i<res.length; i++)
    sb.append(res[i]);
    return sb.toString();
    }
    }