zoukankan      html  css  js  c++  java
  • (数组)大数相乘,相加

    • 题目一:大数相乘。
    • 题目分析:两个大数相加,考虑到数据类型不能表示大数,所以用字符串直接处理两个数。两个数字,用一个数逐位的与另一个数相乘,将所得的乘积逐位相加(注意进位的情况)。最后得到的就是所要的数字。因为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;
          }
      };
  • 相关阅读:
    程序书写规范
    点灯主要顺序
    复用功能重映射
    STM32 (战舰)
    html5 javascript 新增加的高级选择器更精准更实用
    html5 javascript 事件练习3键盘控制练习
    html5 javascript 事件练习3随机键盘
    html5 javascript 事件练习2
    html5 javascript 事件练习1
    html5dom2
  • 原文地址:https://www.cnblogs.com/Kobe10/p/6369960.html
Copyright © 2011-2022 走看看