这题的意思是给你三个数, 第二个数是第一个数的进制, 第三个数是你要转化的进制。 如果输出的数超过7位, 输出<span style="font-family: 'Courier New', Courier, monospace;font-size:14px;">ERROR。</span><span style="font-family: 'Courier New', Courier, monospace;"><span style="font-size:12px;">这里要注意输入输出格式。还有就是里面进制转换的时候, 我怕POW函数的精度不高, 就没用。 不知道用POW函数可不可以AC。</span></span>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream>
#include <algorithm>
#define mem(a) memset(a, 0, sizeof(a))
using namespace std;
int len;
char ch1[10], ch2[10];
long long num;
int main()
{
int hex1, hex2, i, w, mul;
mem(ch1);
mem(ch2);
while(scanf("%c", &ch1[0]) != EOF)
{
w = 0;
num = 0;
for(i = 1;i < 7;i++)
{
scanf("%c", &ch1[i]);
}
scanf("%d%d%*c",&hex1, &hex2);
for(i = 6;i >= 0;i--)
{
if(ch1[i] != ' ')
ch2[w] = ch1[i], w++;
else
break;
}
w = 0;
mem(ch1);
len = strlen(ch2);
mul = 1;
for(i = 0;i < len;i++)
{
if(i != 0)
mul *= hex1;
if(ch2[i] >= '0'&&ch2[i] <= '9')
ch2[i] -= 48;
else if(ch2[i] >= 'A'&&ch2[i] <= 'F')
ch2[i] = ch2[i] - 'A' + 10;
num += (ch2[i] * mul);
}
while((num / hex2) != 0)
{
ch1[w] = num % hex2;
if(ch1[w] >= 0&&ch1[w] <= 9)
ch1[w] += 48;
else if(ch1[w] >= 10&&ch1[w] <= 15)
ch1[w] = ch1[w] - 10 + 'A';
num /= hex2;
w++;
}
ch1[w] = num;
if(ch1[w] >= 0&&ch1[w] <= 9)
ch1[w] += 48;
else if(ch1[w] >= 10&&ch1[w] <= 15)
ch1[w] = ch1[w] - 10 + 'A';
w++;
if(w > 7)
{
printf(" ERROR\n");
mem(ch1);
mem(ch2);
continue;
}
for(i = 0;i < (7 - w);i++)
{
printf(" ");
}
for(i = (w - 1);i >= 0;i--)
{
printf("%c", ch1[i]);
}
printf("\n");
mem(ch1);
mem(ch2);
}
return 0;
}