例题
进制转换技巧
1.r进制转10进制
1.10进制转r进制
用短除法
#include <iostream>//输入输出流
#include <string>//字符串
#include <stack>//栈
//个人认为还是不用万能头好,用了万能头就需要很注意变量名的使用,避免重名。
using namespace std;
string num;//这里用不限长的字符串,比字符数组好
//n转10进制(位值原理)
int convert(string num,int r)
{
int n=0,s=1;
int len=num.length();
for(int i=len-1;i>=0;i--)
{
//16进制特判
if(num[i]<='F'&&num[i]>='A')
{
n+=(num[i]-'A'+10)*s;
s*=r;
}
//普通处理
else
{
n+=(num[i]-'0')*s;
s*=r;
}
}
return n;
}
//输出函数
void output(stack<int> s)
{
while(!s.empty() )
{
if(s.top() <10)
cout<<s.top() ;
else if(s.top() >=10)
cout<<(char)(s.top() +'A'-10);//注意其中16进制的处理
s.pop() ;
}
cout<<endl;
}
//10转m进制(短除法)
void work(int n,int r)
{
stack<int> s;
while(n>0)
{
s.push(n%r);
n/=r;
}
output(s);
}
int main()
{
int oldr,newr;
cin>>oldr;
cin>>num;
cin>>newr;//input
int n=convert(num,oldr);//转为10进制
int lenn=num.length();
work(n,newr);//转为m进制并输出
return 0;
}