首页 > 解决方案 > 为什么函数调用直接进入return语句?

问题描述

我是初学者。我写了一个函数来乘以大整数。当函数multiplybig(string a,string b)被调用时,它直接进入同一函数的返回语句。我不知道错误到底在哪里。有人可以帮我吗?

#include<iostream>
#include<string>
using namespace std;
string multiplybig(string a,string b)
{
    string c;
    int ar1[a.length()] , ar2[b.length()] ; int ans[a.length()+b.length()]={0};

    for(int i=0 ; i<a.length(); i++){
        ar1[i]=a[i]-'0';
    }

    for(int i = 0 ; i<a.length(); i++){
        ar2[i]=b[i]-'0';
    }

    int x = 0 ; int y = 0;

    for(int i=a.length()-1;i>=0;i--) {
        for(int j=b.length()-1;j>=0;j--){
            ans[x]+=ar1[i]*ar2[j];
            x++;
        }
        y++; x=y;
    }

    for(int i=0,j=a.length()+b.length()-1;i<a.length()+b.length();i++,j--){
        c[i]=ans[j]+'0';
    }

    return c;
}
int main()
{
    string a( "123" );
    string b( "111" );
    cout<< multiplybig( a, b );
    return 0;
}

标签: c++integermultiplication

解决方案


总结评论:

不要使用 VLA

int ar1[a.length()] , ar2[b.length()] ; int ans[a.length()+b.length()]={0};

是 VLAa。这些不是标准的一部分,而是编译器特定的扩展。正确的方法是使用std::vector

std::vector<int> ar1(a.length());
std::vector<int> ar2(b.length()); 
std::vector<int> ans(a.length() + b.length());

(每行一个语句以提高可读性)

循环中的错字

for(int i = 0 ; i<a.length(); i++){
    ar2[i]=b[i]-'0';
}

由于您从b条件中读取必须是i < b.length();

越界访问开启c[i]

行前

c[i]=ans[j]+'0';

cget 从未分配任何东西(它是一个空字符串),因此使用下标运算符的任何访问都是越界访问。要么先调整它的大小:

c.resize(ans.size());

push_back改用:

c.push_back(ans[j]+'0');

您在上次编辑中已经修复的最后一个错误(返回值被忽略)。随着所有这些改变,我得到了预期的结果

013653

推荐阅读