我正在使用递归将一个数字转换为具有不同基数的另一个数字,但这是我的代码中的问题。我的代码不符合我的要求。请检查并告诉我问题在哪里? 谢谢!
#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;
}
}
答案 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,最终数字应该是新基数。