我把我的程序放到这里,它是可以正常运行并输出正确结果的,但是也仅仅是这样,其中我用了很多我自己感觉有些猥琐的方法
因为实在不知道更多可以解决这些问题的办法,望各位指正!
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int m, n;//m是被转化的数的进制,n是转化成的进制
string a;//a为要转化的数,为了便于保存abcdef我仅仅想到这一种办法
cin >> m >> n;
if (m == 0 && n == 0)
{
cout << "停止转换";
return 0;
}
cin >> a;
int i, sum = 0, j = 0;
int len1 = a.length();//统计长度,便于用循环转化
for (i = 0; i < len1; i++)//该循环用于转化为10进制数
{
int t;
if (a[i] >= 97 && a[i] <= 102)
{
t = a[i] - 87;//if else把字符串转化为数字
}
else t = a[i] - 48;
sum += t * pow(m, (len1 - 1 - i));
}//成功转换为10进制sum
string b(30, 'a');//定义b,储存转化后的数,此处有一个未解决的问题,b如果不赋初值会导致后续无法输出??
for (i = 0; sum > 0; i++)
{
int c = sum % n;
switch (c)//将每个余数转换为字符串并保存
{
case 1:b[i] = '1'; break;
case 2:b[i] = '2'; break;
case 3:b[i] = '3'; break;
case 4:b[i] = '4'; break;
case 5:b[i] = '5'; break;
case 6:b[i] = '6'; break;
case 7:b[i] = '7'; break;
case 8:b[i] = '8'; break;
case 9:b[i] = '9'; break;
case 10:b[i] = 'a'; break;
case 11:b[i] = 'b'; break;
case 12:b[i] = 'c'; break;
case 13:b[i] = 'd'; break;
case 14:b[i] = 'e'; break;
case 15:b[i] = 'f'; break;
}
sum /= n;
j++;
}
for (int c = j - 1; c >= 0; c--)
{
cout << b[c];//输出转化后的数
}
return 0;
}