1、数制转换
十进制数N和其它d进制数的转换的算法基于原理:
N = (N div d)×d + N mod d
其中,div 相除取整,mod 相除取余。
例如:(1348)10 = (2504)8 ,
其运算过程如下:
N N div 8 N mod 8
1348 168 4
168 21 0
21 2 5
2 0 2
计算顺序与输出顺序相反。因此,可用栈来实现。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <stack>
using namespace std;
int num,num_r;
void conversion()
{
stack<int >s;
while(num)
{
s.push(num%num_r); //除R取余
num=num/num_r;
}
while(!s.empty())
{
int e=s.top();
if(e>9)
{
char c='A'+e-10; //转换为16进制,A,B,···
cout<<c;
}
else
cout<<e;
s.pop();
}
}
int main()
{
cin>>num>>num_r;
cout<<num<<"=";
conversion();
cout<<"(base"<<num_r<<")"<<endl
return 0;
}