You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中Auto_Padding函数的字符串数组为何将字符串04转为00

C++大数字运算代码错误修复

核心错误点

  • Arithmetic_Multiply返回值错误
    函数计算完累加结果存在变量val中,但最后返回的是输入的第二个参数val2,直接导致输入Arithmetic_Multiply("4","5")返回5而非预期的计算结果。
  • Auto_Padding返回static局部数组的生命周期问题
    函数内定义的static string to_return[3]属于静态局部变量,仅会在第一次调用函数时初始化,后续所有调用该函数返回的都是同一块内存地址,且内容不会更新,多次调用Auto_Padding时获取的都是第一次调用的结果,导致加法计算逻辑异常。

修复后的可运行代码

#include <string>
#include <iostream>
#include <stdlib.h>
#include <math.h>
#include <vector>

using namespace std;

string Add_Padding(string val, int padding_amount) {
    string result = "";
    for (int i = 0; i < padding_amount; i++) {
        result += "0";
    }
    return result.append(val);
}

// 改用vector返回规避静态数组生命周期问题
vector<string> Auto_Padding(string val1, string val2) {
    int val1L = val1.length();
    int val2L = val2.length();
    if (val1L > val2L) {
        val2 = Add_Padding(val2, val1L - val2L);
        val1.insert(0, "0");
        val2.insert(0, "0");
        return {val1, val2, to_string(val1L)};
    } else if (val1L < val2L) {
        val1 = Add_Padding(val1, val2L - val1L);
        val1.insert(0, "0");
        val2.insert(0, "0");
        return {val1, val2, to_string(val2L)};
    } else {
        val1.insert(0, "0");
        val2.insert(0, "0");
        return {val1, val2, to_string(val1L)};
    }
}

string Arithmetic_Add(string tempVal1, string tempVal2) {
    vector<string> values = Auto_Padding(tempVal1, tempVal2);
    string val1 = values[0];
    string val2 = values[1];
    int loop_amount = stoi(values[2]);
    int carry = 0;
    int currentResult;
    int tempVar;
    string result = "";
    for (int i = loop_amount; -1 < i; i--) {
        currentResult = carry + (val1[i] - '0') + (val2[i] - '0');
        if (currentResult > 9) {
            carry = floor(currentResult / 10);
            tempVar = currentResult % 10;
            result.insert(0, to_string(tempVar));
        } else {
            carry = 0;
            result.insert(0, to_string(currentResult));
        }
    }
    if (result[0] == '0') {
        result.erase(0, 1);
    }
    return result;
}

string Arithmetic_Multiply(string val1, string val2) {
    int loop_amount = stoi(val2);
    string val = "0";
    for (int i = 0; i < loop_amount; i++) {
        val = Arithmetic_Add(val, val1);
    }
    // 修正返回值为计算得到的val
    return val;
}

int main() {
    cout << Arithmetic_Multiply("4", "5"); // 输出20,符合预期
    cout << endl;
    cout << flush;
    return 0;
}

内容的提问来源于stack exchange,提问作者simpl360

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:15:03