您的位置:首页 > 其它

CSU 1160(进制问题)

2015-07-17 21:11 351 查看

CSU 1160

Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld & %llu

Description

把十进制整数转换为十六进制,格式为0x开头,10~15由大写字母A~F表示。

Input

每行一个整数x,0<= x <= 2^31。

Output

每行输出对应的八位十六进制整数,包括前导0。

Sample Input

0
1023


Sample Output

0x00000000
0x000003FF

此题很巧妙,有多种解法,下面是我在比赛时所写:

#include<stdio.h>
int main()
{
int a,b,i;
char hex[8];
while(scanf("%d",&a)!=EOF)
{
for(i=0;i<8;i++)
hex[i]='0';
i=0;
while(a>=16)
{
b=a%16;
if(b<10)
hex[i]=b+'0';
else
hex[i]=b-10+'A';
a/=16;
i++;
}
if(a<10)
hex[i]=a+'0';
else
hex[i]=a-10+'A';
printf("0x");
for(i=7;i>=0;i--)
printf("%c",hex[i]);
printf("\n");
}
return 0;
}

但是其实还有更简单的格式输出

#include<stdio.h>
int main()
{
   int x;
  while(scanf("%d",&x)!=EOF)
{
  printf("0x%.8X\n",x);
}
  return 0;
}

看完之后是不是想吐血,哈哈。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: