這兩個要求在C語言中可以用 stdlib.h中的itoa()輕易解決。在Dev C++中,用itoa(N, X1, 2)可以求得二進位字串。但是,ACM的裁判系統找不到itao函數,而產生compile error,這段過程是很令人氣結的。
解決之道是我自己再寫一個函數:srt2bin(),將數字字串s,經過以base為底換算成十進位後,再轉換成二進位的字串。存在字串 b 中。數字字元與一般整數型態轉換,必須加減 48 。
void str2bin(char s[], char b[], int base)
{
int i, j, sum=0, prod, len=strlen(s);
char temp[20];
for (i=0;i<len;i++)
{
prod=1;
for (j=len-i-1;j>0;j--)
prod *= base;
sum += prod * (s[i]-48);
}
i = 0;
while (sum!=0)
{
b[i] = sum%2+48;
sum /= 2;
i++;
}
b[i] = '\0';
}
p10019題目連結
回ACM題庫目錄
回首頁
1 則留言:
直接用int處理會不會比較好
貌似沒有用到字串的需要
張貼留言