Description
进制转换是计算机文化的基础内容。
使用程序将进制进行转换,可以考查你对进制转换的掌握程度。
将一个任意位数的十进制数转换为十六进制数你能够做到吗?
Input
首先是一个正整数n(n<100)表明本题有n个正整数需要转换。
然后是n行数据,每行表示一个待转换的正整数k(0〈K〈10000000000)。
Output
输出n个转换后的十六进制数。(使用大写A~F)
每行输出1个。
Sample Input
6
5
12
34000
555555
12344321
9999999999
Sample Output
5
C
84D0
87A23
BC5C01
2540BE3FF
Hint
注意:
本题的K的取值范围。
时隔一年,现在终于能够静下心来写这一题的解题报告了,记得当初第一次试着做这题的时候是2017-04-23,现在是2018-03-20。放了将近一年。。。去年的代码是这样的
#include <iostream>
using namespace std;
void fun(long x);
int main()
{
int n,i;
__int64 x;
//unsigned long long x;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%l64d",&x);
fun(x);
}
return 0;
}
void fun(long x)
{
int m=0,i=0,j;
char b[17]="0123456789ABCDEF";
char c[50];
while(x!=0)
{
j=x%16;
c[i++]=b[j];
x=x/16;
m++;
}
for(i=m-1;i>=0;i--)
printf("%c",c[i]);
printf("\n");
return;
}
但就是在测试9999999999时候出错。。。哇当时那个蓝瘦。。。
经过今天的改进后终于可以AC,也算是完成一桩心愿。
#include<stdio.h> int main() { __int64 x,i,z,q,a,k,w[1000]={0}; char b[100][100]; char c[17]="0123456789ABCDEF"; scanf("%I64d",&x); //进行64位输入 for(i=0;i<x;i++) { scanf("%I64d",&a); //进行64位输入 k=0; while(a>0) { z=a%16; b[i][k]=c[z]; k++; w[i]=k; if(a<16) break; else a=a/16; } } for(q=0;q<x;q++) { for(i=w[q]-1;i>=0;i--) printf("%c",b[q][i]); printf("\n"); } return 0; }