标题
给定一个十进制正整数N,请将其转换为十六进制并输出。
#include<iostream>
using namespace std;
char exchange(int n)
{
switch(n)
{
case 0:
return '0';break;
case 1:
return '1';break;
case 2:
return '2';break;
case 3:
return '3';break;
case 4:
return '4';break;
case 5:
return '5';break;
case 6:
return '6';break;
case 7:
return '7';break;
case 8:
return '8';break;
case 9:
return '9';break;
case 10:
return 'A';break;
case 11:
return 'B';break;
case 12:
return 'C';break;
case 13:
return 'D';break;
case 14:
return 'E';break;
case 15:
return 'F';break;
}
}
int main()
{
int m,note,i=0,s=0;
cin>>m;
note=m;
while(m/16!=0)
{
i++;
m=m/16;
}
char a[i];
while(note/16!=0)
{
a[s]=exchange(note%16);
s++;
note=note/16;
}
a[i]=exchange(note);
for(int j=i;j>=0;j--)
{
cout<<a[j];
}
cout<<endl;
return 0;
}
运行截图
##程序说明
卡脖子的地方是未知长度的数组依次存入每一位十六进制的值,因此需要重复进行求余与取整,也因此需要两组输入的原值与做记录的数组长度值。
##以下是学习他人的
法一
#include<iostream>
using namespace std;
int main()
{
int n,list[100],j=0;
cin>>n;
while(1)
{
list[j]=n%16;
n=n/16;
j++;
if(n==0) break;
}
j--;
for(;j>=0;j--)
{
switch(list[j])
{
case 10:cout<<"A";break;
case 11:cout<<"B";break;
case 12:cout<<"C";break;
case 13:cout<<"D";break;
case 14:cout<<'E';break;
case 15:cout<<"F";break;
default:
cout<<list[j];break;
}
}
return 0;
}
主要:1.数组长度定为100,按道理够用
2.j变量先增大输入,再减小输出
法二
//以上忽略,无论用什么循环将其输到数组,用什么循环倒着来。这些基本与法一相同
if(s[j]<10)
cout<<s[j];
else
cout<<(char)(s[j]+55);