c++ - 如何编写将二进制数转换为十进制数的递归函数?

标签 c++ recursion binary decimal

我正在尝试编写将二进制数转换为十进制数的递归函数。我找不到错误。 任何帮助将不胜感激。

这是我的第一次尝试:

#include <iostream>

int sum = 0;
using namespace std;
int powerofO(int taban, int us)
{
    int result = 1;
    for (int i = 1; i <= us; i++)
            result *= taban;
}

int func(int array[], int length, int weight);

int main()
{
    int *size;
    int digits;
    int binary_array[*size];
    cout << "how many digits ? \n";
    cin >> digits;
    *size = digits;
    cout << "Enter your " << digits <<
        " digits binary number using with a space between"
        " each number \n";
    for (int i = 0; i < digits; i++)
            cin >> binary_array[i];
    cout << func(binary_array, digits, -1) << endl;
    return 0;
}

int func(int array[], int length, int weight)
{
    if (length == 0) {
            sum = sum + array[0];
            return sum;
    }
    func(array, length - 1, weight + 1);
    sum = sum + array[length] * powerofO(2, weight);
    return sum;
}

我尝试将我的功能重新安排为以下内容,但它仍然无法正常工作。

int func( int array[],int length ,int weight){
length--;
weight++;
if(length == 0){
sum = sum + array[0] * powerofO(2,weight);
return sum;}   
sum = sum + array[length] * powerofO(2,weight);
func(array,length,weight);}

最佳答案

直接段错误的原因非常接近 main() 函数的顶部:

int main()
{
    int *size;
    int digits;
    int binary_array[*size];

int *size 只声明了一个指向一个 int 的指针,它实际上并没有为那个 int 分配内存。 *size 稍后在尝试分配数组时被使用,整个事情爆炸了。

所以,稍作重新安排,程序运行。我认为输出还不正确 :) 但我不想剥夺你所有的学习机会。

#include <iostream>

int sum = 0;
using namespace std;
int powerofO(int taban, int us)
{
    int result = 1;
    for (int i = 1; i <= us; i++)
            result *= taban;
}

int func(int array[], int length, int weight);

int main()
{
    int digits;
    cout << "how many digits ? \n";
    cin >> digits;
    int binary_array[digits];
    cout << "Enter your " << digits <<
        " digits binary number using with a space between"
        " each number \n";
    for (int i = 0; i < digits; i++)
            cin >> binary_array[i];
    cout << func(binary_array, digits, -1) << endl;
    return 0;
}

int func(int array[], int length, int weight)
{
    if (length == 0) {
            sum = sum + array[0];
            return sum;
    }
    func(array, length - 1, weight + 1);
    sum = sum + array[length] * powerofO(2, weight);
    return sum;
}

关于c++ - 如何编写将二进制数转换为十进制数的递归函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5448741/

相关文章:

c++ - Webbrowser Active X 自定义动态 MIME 处理程序 pdf

c++ - Luabind: "No matching overload found, candidates:"

Python 3.x 短内存数字猜测(编程/数学)

php - 如何在 PHP 中通过重复字符拆分字符串?

python - 将具有 `NaN` 的稀疏 Pandas 数据帧转换为整数值

c# - BinaryReader、BinaryFormatter - 它们可移植吗?

c++ - scoped_lock() - 使用 pthread 的 RAII 实现

c++ - FindFirstChangeNotification 锁定父文件夹

c++ - 如何在boost spirit中设置最大递归

algorithm - 我怎样才能展开重复: T(n)=2T((n+2)/3)