zoukankan      html  css  js  c++  java
  • LeetCode-Multiply Strings

    Given two numbers represented as strings, return multiplication of the numbers as a string.

    Note: The numbers can be arbitrarily large and are non-negative.

    class Solution {
    public:
        void Plus(string& a,string& b,string& temp){
            int small=min(a.length(),b.length());
            bool flag=false;
            int i=0;
            for(;i<small;i++){
                temp[i]=a[i]+b[i]-'0';
                if(flag)temp[i]++;
                if(temp[i]>'9'){
                    temp[i]-=10;
                    flag=true;
                }
                else{
                    flag=false;
                }
            }
            while(i<a.length()){
                temp[i]=a[i];
                if(flag)temp[i]++;
                if(temp[i]>'9'){
                    temp[i]-=10;
                    flag=true;
                }
                else{
                    flag=false;
                }
                i++;
            }
            while(i<b.length()){
                temp[i]=b[i];
                if(flag)temp[i]++;
                if(temp[i]>'9'){
                    temp[i]-=10;
                    flag=true;
                }
                else{
                    flag=false;
                }
                i++;
            }
            if(flag){
                temp[i]='1';
                i++;
            }
            a.resize(i);
            for(int j=0;j<i;j++)a[j]=temp[j];
        }
        void MultiplyByNum(string& a,int val,int tens,string&temp){
            int j=0;
            for(;j<tens;j++){
                temp[j]='0';
            }
            int f=0;
            for(int i=0;i<a.length();i++,j++){
                int c=(a[i]-'0')*val;
                c+=f;
                temp[j]=c%10+'0';
                f=c/10;
            }
            while(f!=0){
                temp[j]=f%10+'0';
                f=f/10;
                j++;
            }
            a.resize(j);
            for(int i=0;i<j;i++)a[i]=temp[i];
        }
        string multiply(string num1, string num2) {
            // Note: The Solution object is instantiated only once and is reused by each test case.
            string temp;
            if(num1.length()==0||num2.length()==0)return "0";
            temp.resize(num1.length()+num2.length()+1);
            for(int i=0;i<num1.size()/2;i++){
                char c=num1[i];
                num1[i]=num1[num1.size()-1-i];
                num1[num1.size()-1-i]=c;
            }
            for(int i=0;i<num2.size()/2;i++){
                char c=num2[i];
                num2[i]=num2[num2.size()-1-i];
                num2[num2.size()-1-i]=c;
            }
            string p;
            string sum;
            for(int i=0;i<num2.length();i++){
                int val=num2[i]-'0';
                if(val!=0){
                    p=num1;
                    MultiplyByNum(p,val,i,temp);
                    Plus(sum,p,temp);
                }
            }
            if(sum=="")return "0";
            bool allzero=true;
            for(int i=0;i<sum.length();i++){
                if(sum[i]!='0'){
                    allzero=false;
                    break;
                }
            }
            if(allzero)return "0";
            for(int i=0;i<sum.size()/2;i++){
                char c=sum[i];
                sum[i]=sum[sum.size()-1-i];
                sum[sum.size()-1-i]=c;
            }
            
            return sum;
        }
    };
    View Code
  • 相关阅读:
    commonJS — 数组操作(for Array)
    seafile增加邮件服务功能
    2.事务和系统概念
    1.事务处理简介
    glusterfs分布式复制扩容卷以及平衡卷
    seafile数据的备份与恢复
    seafile+glusterfs 安装部署
    虚拟机或物理服务器热添加硬盘
    bash: cannot create temp file for here-document: Read-only file system
    FATAL ERROR: please install the following Perl modules before executing ./mysql_install_db: Data::Dumper
  • 原文地址:https://www.cnblogs.com/superzrx/p/3352921.html
Copyright © 2011-2022 走看看