把十进制整数转换为十六进制,格式为0x开头,10~15由大写字母A~F表示。
Input
Output
Sample Input
Sample Output
每行一个整数x,0<= x <= 2^31。
每行输出对应的八位十六进制整数,包括前导0。
0
1023
0x00000000
0x000003FF
,水题,但要注意2^31,长整形会存不下,另起一个if判断就好了
#include <iostream>
#include <cstring>
#include<stdlib.h>
using namespace std;
int main()
{
char s[10],c[10];
long x;
int i,a[8],j;
while(cin>>c)
{
if (strcmp(c,"2147483648")==0) cout<<"0x80000000"<<endl;
else
{
x=atol(c);
strcpy(s,"0x00000000");
i=0;
for (j=0;j<8;j++) a[j]=0;
while(x/16!=0)
{
a[i]=x%16;
x=x/16;
i++;
}
a[i]=x;
for (j=0;j<=i;j++)
{
if (a[j]<10) s[9-j]=a[j]+'0';
else s[9-j]=a[j]+'A'-10;
}
cout<<s<<endl;
}
}
return 0;
}