2010年4月14日 星期三

Problem 10931 Parity,2 進位的總和

此題是將一個十進位整數 n 轉換為二進位之後,將出現 1 的次數記錄下來,再以 「The parity of (n的二進位) is (n出現 1 的次數) (mod 2).」 印出即可。

首先把 21、22、...、231 找一個陣列來擺放, C 語言程式碼如下:
unsigned int binary[31], total;

void create()
{
int i, j = 1;
for (i = 0, j = 2; i < 31; i ++, j *= 2)
binary[i] = j;
}

再將所輸入的 n 值依序除下來,記錄 1 出現的次數後一起印出即可:
int isPut = 0;  
count = 0;
printf("The parity of ");
for (i = 30; i >= 0; i --)
{
if (isPut || n / binary[i] == 1)
printf("%d", n / binary[i]), isPut = 1;
if (n / binary[i] == 1) count ++ ;
n %= binary[i];
}
if (isPut) printf("%d", n);
if (n == 1) count ++;
printf(" is %d (mod 2).\n", count);

By David.K

p10931題目連結
回ACM題庫目錄
回首頁

沒有留言: