Dream what you want to dream; go where you want to go; be what you want to be, because you have only one life and one chance to do all the things you want to do.
做你想做的梦吧,去你想去的地方吧,成为你想成为的人吧,因为你只有一次生命,一个机会去做所有那些你想做的事。
【算法思想】
先将a进制转换为10进制,再将该十进制数转换为b进制。
特别注意的是,超过10进制的数有用字母表示,所以栈应该存字符。
而且要转换的数据可能是超过10进制的数,所有用字符串表示。
#include <iostream>
#include <cstdio>
#include <stack>
#include<string>
using namespace std;
int main()
{
stack<char> s;//初始化栈,保留转换结果
string value="1110";//value表示要转换的进制数
int mod, base1 = 2,base2 = 16;//mod表示余数,base1表示value的进制,base2表示value要转成的进制
int temp = 0,wight=1;//temp表示暂时存储value的十进制数,wight表示权重
int i=0;
while (value.size()!=i){//base1进制转换成10进制
temp *= base1;
temp += value[i] - '0';
i++;
}
printf("%d\n", temp);
//十进制转换成base2进制
while (temp != 0) {
char m;//临时变量
m = temp % base2 + '0';
if (m > '9') {//如果余数大于9
m = 'A' + (temp % base2 - 10);
}
s.push(m);
temp /= base2;
}
//输出
while (!s.empty())
{
printf("%c", s.top());
s.pop();
}
return 0;
}
将其封装成函数:
void convert(Sqstack &s,string value,int a,int b){
int mod,temp=0,i=0;//mod为余数,temp暂时存储a的十进制数
while(value.size()!=i){//a进制转换成10进制
temp*=a;
temp+=value[i]-'0';
i++;
}
while(temp!=0){//将十进制转换成b进制
char m;//临时变量
m = temp%b+'0';
if(m>'9'){//如果余数大于9
m='A'+(temp%b-10);
}
s.push(m);
temp/=b;
}
}