火星人数制(没有数字0,逢6进1)
思路:
- 将1输入的10进制数字num转化6进制数字,每个数字用vector容器保存,然后转化为字母输出。
- 关键是转化的方法,可以先解决6进制数字加一的情况,将数字num转化为6进制相当于一个由“0”开始的6进制数字循环加num次1.
#include<iostream>
using namespace std;
#include<vector>
void addone(vector<int>& arr)//6进制数加1
{
int index = 0;
while(true)
{
if(arr.size() == index)
{
arr.push_back(1);
break;
}
else
{
arr[index]++;
if(arr[index] == 6)//逢6进1;
{
arr[index] = 1;
index++;
}
else
{
break;//不进1,退出循环
}
}
}
}
int main()
{
int num;//10进制数字
vector<int> arr;//保存6进制数字的数组,下标越大,位数越大。
cin >> num;//输入
for(int i = 0; i < num; i++)
{
addone(arr);//6进制数加一
}
//输出
for(int j = arr.size()-1; j >= 0; j--)
{
cout << (char)(arr[j]+64);
}
cout << endl;
return 0;
}