经典题记录 字符串相加/相乘

1. LeetCode 415 字符串相加

在这里插入图片描述

代码一:代码简短,但需要借助额外的一个string来保存结果,更占用内存。

class Solution {
public:
    string addStrings(string num1, string num2) {
        string ans="";
        int size1=num1.size();
        int size2=num2.size();
        int size=max(size1,size2);
        int flag=0;  //表示进位
        for(int i=size1-1,j=size2-1;i>=0||j>=0||flag>0;i--,j--){
            int x=i<0?0:num1[i]-'0';
            int y=j<0?0:num2[j]-'0';
            flag=flag+x+y;
            char ch=(flag%10)+'0';
            ans=ch+ans;
            flag=flag/10;
        }
        return ans;
    }
};

在这里插入图片描述

代码二:相比代码一行数多点,但是运行时间短一点,内存占用更少。

string add(string str1,string str2){ //字符串相加
    int size1 = str1.size();
    int size2 = str2.size();
    if(size1>size2){
        for (int i = 0; i < size1 - size2;i++)
            str2 = "0" + str2;
    }
    if(size2>size1){
        for (int i = 0; i < size2 - size1;i++)
            str1 = "0" + str1;
    }
    int flag = 0;
    int size = max(size1, size2);
    for (int i = size - 1; i >= 0;i--){
        flag = flag + (str1[i] - '0') + (str2[i] - '0');
        str1[i] = (flag % 10)+'0';
        flag /= 10;
    }
    if(flag){
        char x = flag + '0';
        str1 = x + str1;
    }
    return str1;
}

在这里插入图片描述

LeetCode 43 字符串相乘

在这里插入图片描述

代码:在这里插入图片描述

class Solution {
public:
    string add(string str1,string str2){ //数字字符串相加
        string str="";
        int flag=0;
        for(int i=str1.size()-1,j=str2.size()-1;i>=0||j>=0;i--,j--){
            int x =i<0?0:str1[i]-'0'; //i等于0表示最高位了,i<0时前面没有数字了
            int y =j<0?0:str2[j]-'0'; //j等于0表示最高位了,j<0时前面没有数字了
            flag+=x+y; //当前位的和
            char ch=flag%10+'0';
            flag/=10;
            str=ch+str;
        }
        if(flag){
            char x = flag + '0';
            str = x + str;
        }
        return str;
    }

    string multiply(string num1, string num2) { //数字字符串相乘
        if(num1=="0"||num2=="0")
            return "0";
        string ans=""; 
        for(int i=num2.size()-1;i>=0;i--){
            char ch=num2[i];
            string tmp="";
            int flag=0;
            for(int j=num1.size()-1;j>=0;j--){
                int x=num1[j]-'0';
                int y=ch-'0';
                int n=x*y+flag;
                flag=n/10;//进位
                char a=n%10+'0';
                tmp=a+tmp;
            }
            if(flag){
                char x=flag+'0';
                tmp=x+tmp;
            }
            for(int k=0;k<num2.size()-1-i;k++) //后面补零
                tmp+="0";
            ans=add(ans,tmp);
        }
        return ans;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值