Posted on 2010-10-19 20:02
李東亮 閱讀(1784)
評論(0) 編輯 收藏 引用 所屬分類:
acm
ZOJ 1334 Basically
Speaking
這是一道簡單的進制轉換題,也是一道讓我無語的題。
題目大意較為簡單,但是提交了n次,一直PE,檢查了好多地方,實在感覺沒頭緒了,就活馬當死馬醫,把printf(“%*c”, len, ‘ ’)換成了循環,因為要右對齊,所以輸出些空格,竟然AC了,竟然是對printf的這種輸出格式理解有誤,無語呀。
參考代碼如下:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
char a[50];
char ch[] = "0123456789ABCDEF";
int main(void)
{
int to, from;
unsigned sum;
int len;
int i;
unsigned t;
freopen("in.txt", "r", stdin);
while (scanf("%s %d %d", a, &from, &to) != EOF)
{
sum = 0;
t = 1;
len = strlen(a);
for (i = len-1; i >= 0; --i)
{
if (isdigit(a[i]))
{
sum += (a[i] - '0')*t;
}
else
{
sum += (a[i] - 'A' + 10)*t;
}
t *= from;
}
if (to == 10)
{
len = (int)log10(sum)+1;
if (len > 7)
{
printf(" ERROR\n");
}
else
{
printf("%7d\n", sum);
}
}
else
{
i = 0;
while (sum > 0)
{
a[i++] = ch[sum%to];
sum /= to;
}
if (i > 7)
{
printf(" ERROR\n");
}
else
{
len = 7-i;
printf("%*c", len, ' ');
--i;
while (i >= 0)
{
putchar(a[i--]);
}
printf("\n");
}
}
}
return 0;
}