字符串相乘——力扣

打印 上一主题 下一主题

主题 984|帖子 984|积分 2952

给定两个以字符串情势表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串情势。
注意:不能利用任何内置的 BigInteger 库或直接将输入转换为整数。

示例 1:
  1. <strong>输入:</strong> num1 = "2", num2 = "3"
  2. <strong>输出:</strong> "6"
复制代码
示例 2:
  1. <strong>输入:</strong> num1 = "123", num2 = "456"
  2. <strong>输出:</strong> "56088"
  3.  
复制代码
代码实现:
  1. class Solution {
  2.     public String multiply(String num1, String num2) {
  3.         int len1=num1.length();
  4.         int len2=num2.length();
  5.         int[] arr=new int[len1+len2];
  6.         //记录位置
  7.         int flag=0;
  8.         for(int i=len1-1;i>=0;i--){
  9.             //初始位置
  10.             flag=i+len2;
  11.             for(int j=len2-1;j>=0;j--){
  12.                 int num=(num1.charAt(i)-'0')*(num2.charAt(j)-'0');
  13.                 int carry=num/10;
  14.                 int cur=num%10;
  15.                 arr[flag]+=cur;
  16.                 //如果当前位大于10了就进位
  17.                 if(arr[flag]>=10){
  18.                     //确保当前位-1还是有效位
  19.                     //然后进位
  20.                     if(flag-1>=0){
  21.                         arr[flag-1]+=arr[flag]/10;
  22.                         arr[flag]=arr[flag]%10;
  23.                     }
  24.                 }
  25.                 //进位
  26.                 if(flag-1>=0){
  27.                     arr[flag-1]+=carry;
  28.                 }
  29.                 flag--;
  30.             }
  31.         }
  32.         //转换结果为字符串
  33.         StringBuffer res=new StringBuffer();
  34.         for(int i=0;i<arr.length;i++){
  35.             //把前边为零的消掉(比如2*3 arr数组存储的是0 6),同时避免了一些长数组相乘为零的情况
  36.             //(比如0*9901 arr数组存储为0 0 0 0 0。)
  37.             if(!(res.length()==0&&arr[i]==0)){
  38.                 res.append(arr[i]);
  39.             }
  40.         }
  41.         //如果res.length==0说明结果为0
  42.         return res.length()==0?"0":res.toString();
  43.     }
  44. }
复制代码
 
测试结果:
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

兜兜零元

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表