我正在创建一个程序,使用递归将任何基数10转换为任何其他基数,最多36个,我找不到合适的位置来将我的开关用于将大于9的递归函数返回的任何余数更改为其信对应。 (A = 10,B = 11 ......)我的转换函数使用递归,似乎使得实现切换更加困难。放置开关的适当位置在哪里?
将200从十进制转换为十六进制应为c8。我的程序将其打印为128. 12应该是c,这是交换机的用途。
我正在使用递归,因为它是一种非常简单的转换为新基础的方法。 截至目前,程序运行但仍然继续输出数字而不是切换。感谢您的回复!
#include <iostream>
#include <string>
#include<cstdlib>
using namespace std;
int baseConversion(int num, int base);
int main()
{
int numInput;
int baseInput;
cout << "Enter number for conversion: " << endl;
cin>>numInput;
cout<<"Enter the base you would like the number converted to: "<<endl;
cin>>baseInput;
//int temp2 = baseConversion(numInput,baseInput);
cout << numInput <<" to the base "<<baseInput<<" is: ";
switch(baseConversion(numInput,baseInput))
{
case 10:
cout << "A";
break;
case 11:
cout << "B";
break;
case 12:
cout << "C";
break;
case 13:
cout << "D";
break;
case 14:
cout << "E";
break;
case 15:
cout << "F";
break;
case 16:
cout << "G";
break;
case 17:
cout << "H";
break;
case 18:
cout << "I";
break;
case 19:
cout << "J";
break;
case 20:
cout << "K";
break;
case 21:
cout << "L";
break;
case 22:
cout << "M";
break;
case 23:
cout << "N";
break;
case 24:
cout << "O";
break;
case 25:
cout << "P";
break;
case 26:
cout << "Q";
break;
case 27:
cout << "R";
break;
case 28:
cout << "S";
break;
case 29:
cout << "T";
break;
case 30:
cout << "U";
break;
case 31:
cout << "V";
break;
case 32:
cout << "W";
break;
case 33:
cout << "X";
break;
case 34:
cout << "Y";
break;
case 35:
cout << "Z";
break;
default:
cout <<baseConversion(numInput,baseInput);
}
cout<<endl;
return 0;
}
int baseConversion(int num, int base)
{
if(num == 0 || base == 10)
return num;
return (num% base) + 10*baseConversion(num / base, base);
}
`
答案 0 :(得分:0)
这是一个粗略的递归基本转换函数,可以帮助您理解它与您所做的之间的区别:
std::string baseConversion(int num, int base)
{
std::string result;
if (num>=base) result = baseConversion(num/base, base);
num %= base;
if (num<10) result += (char)('0' + num); else result += (char)('A'+num-10);
return result;
}
该函数在num<base
时以空字符串开头,或者在num>=base
时以最右边的数字(递归计算)开始。
然后它将最后一位数字附加到该数字。
答案 1 :(得分:0)
你真的不需要一个开关,正如评论中所指出的那样:这可以这样做
string f(int n, int base) {
string res = "";
if (n < base)
res += n < 10 ? n : n + 'A' - 10;
else {
string t = f(n / base, base);
res += t + (n % base) < 10 ? n % base : (n%base) + 'A' - 10; //t should be on LHS
}
return res;
}
另外,请注意您应该将单个字符追加到字符串或字符数组中,而不是像往常一样将其附加到int数据类型。
再次在评论中指出,除非仅仅是为了学习,否则不需要递归。