第一次写博客,记录一下平时做的题,以便以后复习使用
这是一道进制转换的题,代码如下:
由于0-Z只有36个字符,所以这个题只能在36进制以内转换哦
思路是先将M进制数字转换为十进制,再将十进制转换为N进制
#include<iostream>
#include<string>
using namespace std;
void convert_MtoN(string a,int M,int N)
{
long long temp=0;
for(int i=0;i<a.length();i++)//先将a转换为10进制数
{
if(a[i]>='A' && a[i]<='Z')
{
temp*=M;
temp+=a[i]-'A'+10;
}
else if(a[i]>='0' && a[i]<='9')
{
temp*=M;
temp+=a[i]-'0';
}
else
{
cout<<"输入非法!\n";
return;
}
}
if(N==10)//如果转化为十进制的话就直接输出了
cout<<temp;
else
{
if(temp==0)
cout<<0;
string b="";
int n=0;//记录有多少位数
while(temp>0)
{
b+=char(temp%N+'0');
temp/=N;
n++;
}
for(int i=n-1;i>=0;i--)
{
if(b[i]>'9')
cout<<char(b[i]-10+'A');
else
cout<<b[i];
}
}
}
int main()
{
//例子
string a="CAIXUKUN666";
//cin>>a;
convert_MtoN(a,36,10);
return 0;
}