(数组)大数相乘,相加

  • 题目一:大数相乘。
  • 题目分析:两个大数相加,考虑到数据类型不能表示大数,所以用字符串直接处理两个数。两个数字,用一个数逐位的与另一个数相乘,将所得的乘积逐位相加(注意进位的情况)。最后得到的就是所要的数字。因为m位的数乘以n位的数,最多得到m+n的位数,所以用m+n的数组存储最终结果。
    这个是代码的计算过程图。
  • 代码:
    public String multiply(String num1, String num2) {
        int n1 = num1.length();
        int n2 = num2.length();
        StringBuilder sb = new StringBuilder();
        int[] tmp = new int[n1+n2];
         
        for(int i=n1-1;i>=0;i--){
            for(int j=n2-1;j>=0;j--){
                tmp[i+j+1] +=(num1.charAt(i)-'0')*(num2.charAt(j)-'0');
            }
        }
        int carrybit=0;//从个位开始,carrybit是进位
        for(int i=tmp.length-1;i>=0;i--){
            tmp[i]+=carrybit;
            carrybit=tmp[i]/10;
            tmp[i]=tmp[i]%10;
             
        }
        int left=0;
        while(left<tmp.length-1&&tmp[left]==0)
            left++;
        for(;left<tmp.length;left++){
            sb.append(tmp[left]);
        }
        return sb.toString();   
    }

     

  • 题目二:大数相加
  • 题目分析:利用字符串进行相加减。
  • 代码:
    class Solution {
    public:
        string addBinary(string a, string b) {
            int len_a = a.size()-1;
            int len_b = b.size()-1;
            int carry = 0;
            string sum;
            while (len_a >= 0 || len_b >= 0){
                int flag = 0;
                if (len_a >= 0){
                    flag += a[len_a] - '0';
                    len_a--;
                }
                else
                    flag += 0;
                if (len_b >= 0){
                    flag += b[len_b] - '0';
                    len_b--;
                }
                else
                    flag += 0;
                flag += carry;
                carry = flag/2;
                sum = static_cast<char>(flag%2+'0') + sum;
            }
            if (carry == 1)
                sum = '1' + sum;
            return sum;
        }
    };

     

posted @ 2017-02-06 13:10  Kobe10  阅读(1040)  评论(0编辑  收藏  举报