力扣415——字符串相加,进制加法

文章提供了一个C++类Solution,包含方法addStrings用于将两个字符串形式的数字相加。代码从字符串末位开始,逐位进行加法运算,处理进位情况,并使用reverse函数反转结果字符串以得到正确的数字顺序。另外,文章中还提到了可能出现的编译错误及其原因,如未声明std命名空间或未包含algorithm头文件。
摘要由CSDN通过智能技术生成

```cpp
class Solution {
public:
    string addStrings(string num1, string num2) {
        string ans = "";

        //初始位置,从末位开始
        int i = num1.size() - 1;
        int j = num2.size() - 1;

        //表示进位
        int add = 0;

        //注意逻辑连接词为 || ,因为不一定位数相同
        //i,j 往前移动,最终到 i=0,j=0 所以终止条件为 i<0,j<0
        while(i>=0 || j>=0 || add != 0){

            //三目运算符,x,y分别赋值两个数的个位数
            int x =   i>=0 ? num1[i] - '0' : 0;
            int y =   j>=0 ? num2[j] - '0' : 0;

            int result = x+y+add;

            //加 0 可以满足转化为字符串
            //注意这里不是 += ,而是入串
            ans.push_back('0' + result % 10);

            //用求余更改进位值
            add = result /10;

            i --;
            j --;
        }
        //注意反转单词,不要写错
        reverse(ans.begin(),ans.end());

        return ans;
    }
};

同类型题目,稀土掘金
在这里插入图片描述记录bug
报错 error: no type named ‘type’ in ‘struct std::enable_if<false, void>’

一般来讲,该错误发生的原因多为未声明std namespace,但是如果cin、cout时未注意<<或>>此类信息流方向,也会导致报该错误。

报错 error: error: ‘reverse’ was not declared in this scope

需要声明 algorithm 。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

int getInt(char a){
    if(isdigit(a)){
        return a - '0';
    }else{
        return a - 'a' + 10;
    }
}

char getChar(int i){
    if(i >= '0' && i <= '9'){
        return i + '0';
    }else{
        return i + 'a' - 10;
    }
}

int main(){
    string num1;
    string num2;
    cin>>num1>>num2;

    int i = num1.size() - 1;
    int j = num2.size() - 1;
    int add = 0;
    string ans = "";

    while (i>= 0 || j >= 0 || add != 0)
    {
        /* code */
        //将 a 看作 10 ,b 看作 11
        int x = i>= 0 ? getInt(num1[i]) : 0;
        int y = j>=0 ? getInt(num2[j]) : 0;
        int result = x + y + add;
        ans.push_back(getChar(result % 36));
        add = result / 36;
        i --;
        j --;
    }
    reverse(ans.begin(),ans.end());
    cout<<ans;

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值