#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
//函数声明,用于将整数n转换为以b为基的字符串
string itob(int n, int b);
int main()
{
//用于存储从控制台输入的整数n
int n;
//用于存储从控制台输入的进制数b
int b;
//用于存储转换后的字符串结果
string s;
//从控制台读取整数n和进制数b,以空格分隔
cin >> n >> b;
//调用itob函数进行进制转换,将结果存储到s中
s = itob(n, b);
//将转换后的字符串输出到控制台
cout << s;
return 0;
}
string itob(int n, int b)
{
//用于存储每次计算得到的余数
int num;
//定义一个向量,用于存储转换过程中得到的字符,最终将构成转换后的字符串
vector<char> A;
//用于标记输入的整数n是否为负数,初始化为false
bool isN = false;
//判断输入的整数n是否为负数
if (n < 0)
{
//如果n是负数,将isN标记为true
isN = true;
//将n取绝对值,以便后续正常进行进制转换操作
n = -n;
}
//处理n为0的特殊情况,若n为0,直接返回字符串"0"
if (n == 0)
return "0";
//定义用于转换数字为字符的字符数组
//其中包含了0-9以及a-z的字符,可用于表示不同进制下的数字字符
const char digits[] = "0123456789abcdefghijklmnopqrstuvwxyz";
//当n大于0时,进行进制转换的循环操作
while (n > 0)
{
//计算n除以b的余数,该余数将对应转换后的字符在digits数组中的索引
num = n % b;
//更新n的值,为下一次循环做准备,即n除以b的商
n = n / b;
//根据计算得到的余数num,从digits数组中获取对应的字符,并添加到向量A中
A.push_back(digits[num]);
}
//如果原数n是负数,在生成的字符串前添加负号
if (isN)
A.push_back('-');
//反转结果向量A,因为在循环中是从低位到高位得到字符的,反转后可得到从高位到低位的正确顺序
reverse(A.begin(), A.end());
//将结果向量A转换为字符串,以便返回最终的转换结果
string Astr(A.begin(), A.end());
return Astr;
}