|
|
发表于 2022-4-1 00:09:59
|
显示全部楼层
浙江省杭州市
采用下面的写法,可以正确的处理满足题目要求的各个参数,如果存在错误将返回-1,至于测试用例,放在结构体数组里就行了:
#include <stdio.h>
long ChgxTo10(char a[], int x)
{
if (!(x >= 2 && x <= 16))
{
return -1;
}
char map[256];
for (int i = 0; i < 256; i++)
{
map[i] = -1;
}
for (int i = 0; i < 9; i++)
{
map['0' + i] = i;
}
for (int i = 0; i < 6; i++)
{
map['a' + i] = map['A' + i] = 10 + i;
}
long sum = 0, n = 1, len = 0;
while (a[len] != '\0')
{
len++;
}
while (len-- > 0)
{
int t = map[a[len]];
if (t == -1 || t >= x)
{
return -1;
}
sum = sum + t * n;
n = n * x;
}
return sum;
}
int main()
{
struct tagItem {
char *str;
int num;
} arr[] = {
{ "3A", 3 }, // error
{ "fF", 16 },
{ "75", 100 }, // error
{ "101010101001", 2 },
{ "10", 10 }
};
for (int i = 0; i < sizeof(arr)/sizeof(*arr); i++)
{
printf("%s: %lld\n",
arr[i].str, ChgxTo10(arr[i].str, arr[i].num));
}
return 0;
} |
|