本题要求实现一个将长整数转化成16进制字符串的简单函数。
函数接口定义:
void f( long int x, char *p );
其中x是待转化的十进制长整数,p指向某个字符数组的首元素。函数f的功能是把转换所得的16进制字符串写入p所指向的数组。16进制的A~F为大写字母。
裁判测试程序样例:
#include
#define MAXN 10
void f( long int x, char *p );
int main()
{
long int x;
char s[MAXN] = "";
scanf("%ld", &x);
f(x, s);
printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
123456789
输出样例1:
75BCD15
输入样例2:
-125
输出样例2:
-7D
void f(long x,char * s)
{
if (x < 0) s[0] = '-';
int i,j,c;
for(i=(x<0?0:-1);x>0;i)
{
s[++i]=x%16;
x/=16;
}
for(j=i;j>=0;j--)
if(s[j]<10)s[j]+=48;
else s[j]+=55;
s[i+1]='\0';
for(j=0;j<i;j++,i--)
{c=s[j];s[j]=s[i];s[i]=c;}
}
还是部分正确,还有能简单点吗,我初学者。。٩(๑òωó๑)۶尽量没有‘’可以不用数组吗
还要考虑负数情况嘛hhh
void f( long int x, char *p ) {
if(x>=0)
sprintf(p, "%X", x);
else{
*p='-'; p++;
sprintf(p,"%X", -x);
}
}
我想最简单的应该是直接使用标准库提供的转换函数(其实就是封装了对sprintf的调用):
void f( long int x, char *p ) {
sprintf(p, "%X", x);
}