CSU 1160(进制问题)

                             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;
}

看完之后是不是想吐血,哈哈。

你可能感兴趣的:(问题)