输入
0xA
输出
10
方案一:采用strtol()函数将其转换为长整数,再将整数转换为三进制
#include<iostream>
#include<vector>
using namespace std;
//string sixtothree(string s)
//{
//}
int main()
{
string x;
cin >> x;
char* s = (char*)x.c_str();//转换为const char*类型
int d=strtol(s,NULL,0);//转换为十进制
int div;vector<int> r;int c;int i = 0;
div = d % 3;
d = d / 3;
while (d)//直到除数为0,结束
{//转换为三进制
r.push_back(div);//余数
i++;
div = d % 3;
d = d / 3;
}
r.push_back(div);
for (int j = r.size()-1;j>=0;j--)//求反
{
cout << r[j];
}
}
方案二:一位一位转换
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int sixtoten(string s)
{
int n = s.length();int sum = 0;
int i;
for (i = 2;i < n;i++)
{
if (s[i] <= '9')
{
sum = sum + (s[i] - '0') * pow(16, n - i - 1);
}
else
sum = sum + (s[i] - 'A'+10) * pow(16, n - i - 1);
}
return sum;
}
int main()
{
string s;int d;
cin >> s;
d=sixtoten(s);
int div;vector<int> r;int c;int i = 0;
div = d % 3;
d = d / 3;
while (d)
{
r.push_back(div);
i++;
div = d % 3;
d = d / 3;
}
r.push_back(div);
for (int j = r.size()-1;j>=0;j--)
{
cout << r[j];
}
}