前提
将十进制转化为十六进制
第一次尝试(不对)
#include <iostream>
using namespace std;
int main(){
int n;
while(cin>>n) {
while(n>16){
//判断是否大于九;
int m=n/16;
if(m<10)
cout<<n/16;
else cout<<'A'+char(m-10);
n %= 16;
}
// if(n<10)
cout<<n<<endl;
//else cout<<'A'+char(n-10);
}
}
第二次(不对)
int n,m;
while(cin>>n){
m=n%16;
if(m<10&&m>0)
cout<<m;
else if(m>=10)cout<<char(65+m-10);
while(n>15){
//判断是否大于九;
m=n%16;
if(m<10)
cout<<m;
else cout<<char(65+m-10);
n /= 16;
}
if(n<10)
cout<<n;
else cout<<char(65+n-10);
}
第三次(奈斯)
终于对了,确实是必须用栈的(如果不用递归)
还有j减减,还是老毛病
#include <iostream>
using namespace std;
int main(){
int n;
while(cin>>n){
int i,max=16;
//max为上界
for(i=1;max<=n;i++)
max=max*16;
//分配栈;
int *p=new int [i];
//取余倒记
for(int j=0;j<i;j++){
p[j]=n%16;
n/=16;
}
//末尾输出,注意特殊字符
for(int j=i-1;j>=0;j--){
if(p[j]<9) cout<<p[j];
else cout<<char(65+p[j]-10);
}
//删除栈
delete[] p;
}
}
总结
这里的“栈”并不是一般意义的栈,就是我为了倒着输出,方便记忆的
非递归求数制转化要倒着输出
ps:这道题比较经典(是我之前做的),我就放上来了,还记得,当初将字符转化成数字的时候,傻傻地-65
的操作,殊不知可以是-'0'