1546 Basically Speaking

問題概要

a進数で表現された数nが与えられる。これをb進数へ変換せよ。
ただし結果が7桁に収まらない場合はERRORを出力せよ。

解法

昔WA貰ってた奴。基数変換やるだけなのに何故……

ソースコード

ll mx[17],from;
char in[9]; int a,b;

int main()
{
	rep(i,17)
	{
		mx[i]=1; rep(j,7)mx[i]*=i;
	}
	while(~scanf("%s%d%d",in,&a,&b))
	{
		from=0;
		for(int i=0;in[i];i++)
		{
			from*=a;
			if(isdigit(in[i]))from+=in[i]-'0';
			else from+=in[i]-'A'+10;
		}
		
		if(from>=mx[b])puts("  ERROR");
		else
		{
			int d=0;
			for(;from;from/=b,d++)
			{
				if(from%b>9)in[d]=from%b-10+'A';
				else in[d]=from%b+'0';
			}
			in[d]=0;
			reverse(in,in+d);
			printf("% 7s\n",in);
		}
	}
	return 0;
}