看了牛客网的回答,基本上都是利用了检测的漏铜,直接输出了int整数,而非字符串。
#include <stdio.h>
static int * a2A(char * str)
{
if (*str >= 'a' && *str <= 'z')
*str = *str - 32;
return str;
}
static int mypow(int base, int n)
{
int result = 1;
int i;
for (i = 0; i < n; i++)
{
result = result*base;
}
return result;
}
static int mystrlen(char * str)
{
int count = 0;
for (int i = 0; *(str+i)!= '\0'; i++)
count++;
return count;
}
int main()
{
//char a[]={'b','b','c'} ;
//printf("%d",mystrlen(a));
char stringhex[100];
//stringhex[2] = 'a';
char stringdecimal[200];
int len;
//printf("%d\n", mypow(4,4));
//printf("%c\n", *(A2a(&stringhex[2])));
//gets(stringhex);
//printf("****gets finished\n");
while (gets(stringhex))
{
int num=0;
int i = 0;
len = mystrlen(stringhex);
for (i = len-1; i >= 0; i--)
{
//printf("****%d\n", i);
//printf("****%d\n", num);
a2A(&stringhex[i]);
if (stringhex[i] >= '0' && stringhex[i] <= '9')
num += (stringhex[i] - '0' + 0)*mypow(16, len-i-1);
else
{
if (stringhex[i] == 'X')
{
goto print;
}
num += ((stringhex[i] - 'A' + 10))*mypow(16, len-i-1);
}
}
print:
//printf("\n%d\n", num);
i = 0;
int count = 0;
while(num)
{
stringdecimal[i] = '0' + (num % 10);
num = num / 10;
//printf("\n%d %d %c\n", num, i,stringdecimal[len- 1 - i]);
i++;
count++;
}
//printf("****%s****\n", stringdecimal);
len = mystrlen(stringdecimal);
for (i = count - 1; i >= 0; i--)
{
printf("%c", stringdecimal[i]);
}
printf("\n");
}
return 0;
}
自己实现了strlen,pow,大写字母转小写。当然这是假设在输入正确的基础上。
注意点:
1、系统输入的格式为0x开头,因此应该设置逢x退出。
2、要输出的时字符串,而非int型的整数。