ACM比赛(进制转换)

时间:2022-07-13 18:20:50
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

程序分析:对于进制的转换这类问题的方法是除基取余,结果反过来写。但对于这个题目大家可以看到并有提示几次结束,所以我们可以用这样一条语句来实现结束:

while(cin>>n)或许是while(cin>>n!=EOF)这两条语句是等价的。此外值得注意的就是上一次结束完一定要记得清0,这条语句也可以写在第一个while语句后,这样就能够解决上次的结果会影响这次的结果了。
程序代码:
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{char a[11]={"0000000000"}; int n,i=0,k=0,T; char j='0';
while(cin>>n)
{
while(n)
{
i=n%16;
if(i>9)
j=i-10+'A';
else j=i+'0';
k++;
a[k]=j; n=n/16;
} cout<<"0x";
for(i=8;i>0;i--)
cout<<a[i];
cout<<endl;
for(int l=0;l<11;l++)
a[l]='0';
k=0;
}
return 0;
}