使用递归将数字转换为具有不同基数的另一个数字?

时间:2016-01-30 13:29:23

标签: c++ recursion

我正在使用递归将一个数字转换为具有不同基数的另一个数字,但这是我的代码中的问题。我的代码不符合我的要求。请检查并告诉我问题在哪里? 谢谢!

#include <iostream>
using namespace std;
int baseFunction(int, int);
int main()
{
    int number,base;
    cout<<"Enter number: ";
    cin>>number;
    cout<<"Enter base: ";
    cin>>base;
    cout<<"OutPut "<<number<<" is ";
    baseFunction(number,base);
    cout<<" in base "<<base<<endl;

}
int baseFunction(int n,int b)
{
    if(n==1)
        return n;
    else
    {
        baseFunction(n/b,b);
        cout<<n%b;
    }

}

2 个答案:

答案 0 :(得分:0)

虽然你已经想到了正确的方向,但你的逻辑上犯了一个小错误。

if(n==1)
    return n;
else
{
    baseFunction(n/b,b);
    cout<<n%b;
}

这仅在n = 1时返回,如果您想使用代码将其转换为其他基础,则这不正确。 例如,如果你想将10转换为八进制,即base = 8,那么n / b的计算将永远不会给你1.它将在第一次给出n = 2,为下一次递归给出0。所以,这对你的代码不起作用。

请考虑以下代码:

    if(n>0)
    {
        baseFunction(n/b,b);
        cout<<n%b;
    }
    else
    {
        return;
    }

现在这将起作用,因为只要n的值小于0,递归就会终止,并且会给你正确的结果。

此代码肯定不适用于转换为十六进制(base = 16)。您可以尝试在此添加更多代码行,以使其适用于十六进制转换。

希望这有帮助!

答案 1 :(得分:-1)

cout<<"Enter number: ";
//enters NUMBER
cin>>number;
cout<<"Enter base: ";
//enters BASE
cin>>base;
cout<<"OutPut "<<number<<" is ";
//function, that returns int, returns it to nothing, so nothing changes
baseFunction(number,base);
//BASE unaffected, since function did nothing
cout<<" in base "<<base<<endl;

所以,它不会起作用。即使您指定了返回值,函数计算也是错误的。所以,你必须更加努力。您应该搜索一些基本系统转换(可能在此处,在堆栈上)。

编辑: 此外,您应该输出新的数字,而不是基数。我假设您的初始基数是10,最终数字应该是新基数。