[面试题] Add Two String 求两个string型数字的和

该博客主要讨论如何解决面试中的一道编程题,即给定两个字符串形式的数字a和b,计算它们的和并以字符串形式返回结果。文章通过分析思路和对比类似LeetCode题目,解释了如何进行字符串数字的加法操作,重点在于字符串与整数之间的转换技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

输入string a, string b,求a和b的和,并且将和也用string型式返回。

分析:

来自F的面试题,编程基本功练习。模拟加法,和leetcode上的这道题比较像。 知道如何把对string型的'9'和int型的9进行相互转换即可。

我的代码:

#ifndef Add_String_Solution_h
#define Add_String_Solution_h
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <unordered_map>
#include <unordered_set>
#include <queue>
#include <stack>
#include <cmath>
#include <algorithm>
using namespace std;

class Solution {
public:
    string addBinary(string a, string b) {
        int len_a=(int)a.length()-1;
        int len_b=(int)b.length()-1;
        if(a.empty())
            return b;
        if(b.empty())
            return a;
        int sum=0;
        string res="";
        
        while((len_a>=0)&&(len_b>=0)){
            sum+=(a[len_a]-'0')+(b[len_b]-'0');
            char tmp[2];
            int tmp_sum=sum%10;
            sprintf(tmp,"%d",tmp_sum); //int转char*
            res=string(tmp)+res;//char*转string
            sum=sum/10;
            len_a--;
            len_b--;
        }
        
        while(len_a>=0){
            sum+=a[len_a]-'0';
            char tmp[2];
            int tmp_sum=sum%10;
            sprintf(tmp,"%d",tmp_sum);
            res=string(tmp)+res;
            sum=sum/10;
            len_a--;
        }
        
        while(len_b>=0){
            sum+=b[len_b]-'0';
            char tmp[2];
            int tmp_sum=sum%10;
            sprintf(tmp,"%d",tmp_sum);
            res=string(tmp)+res;
            sum=sum/10;
            len_b--;
        }
        if(sum>0){
            char tmp[2];
            int tmp_sum=sum%10;
            sprintf(tmp,"%d",tmp_sum);
            res=string(tmp)+res;
        }
        return res;
    }
};
#endif




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值