I
,輸出二進位表示法與 parity
I
直到 0parity
其實我看不懂題目後面還有寫
or 1
是什麼意思 QAQ
The parity of B is P (mod 2).
B
是 I
的二進位表示法P
就是 parity
while
迴圈讀入整數 I
直到 0
int I, P;
while(scanf("%d", &I) && I){
...
}
while
迴圈每次都透過 % 2
檢查奇偶 (代表最後一位 0 or 1),並存放到字元陣列裡,並計算 parity
的次數
char B[50] = {0};
P = 0;
k = 0;
while(I > 0){
if(I % 2){
B[k] = '1';
P++;
}
else{
B[k] = '0';
}
k++;
I = I / 2;
}
用字元陣列就是因為原本想用
strrev()
來偷懶
結果好像因為 Judge 的環境問題
蠻高機會有可能不支援 QAQ
而且多餘的 0 也會被輸出
// printf("The parity of %s is %d (mod 2).\n", strrev(B), P);
printf("The parity of ");
for(i = strlen(B) - 1; i >= 0; i--){
printf("%c", B[i]);
}
printf(" is %d (mod 2).\n", P);
#include<stdio.h>
#include<string.h>
int main(){
int I, P;
int k;
int i;
while(scanf("%d", &I) && I){
char B[50] = {0};
P = 0;
k = 0;
while(I > 0){
if(I % 2){
B[k] = '1';
P++;
}
else{
B[k] = '0';
}
k++;
I = I / 2;
}
// printf("The parity of %s is %d (mod 2).\n", strrev(B), P);
printf("The parity of ");
for(i = strlen(B) - 1; i >= 0; i--){
printf("%c", B[i]);
}
printf(" is %d (mod 2).\n", P);
}
return 0;
}
& 1
一樣會使結果只有 0 or 1,每次都右移一個,檢查最右位元
int P = 0;
int bit[31] = {0};
for(i = 0; I > 0; i++){
if(I & 1){
P++;
}
bit[i] = I & 1;
I >>= 1;
}
#include<stdio.h>
int main(){
int I;
int i, j;
while(scanf("%d", &I) && I){
int P = 0;
int bit[31] = {0};
for(i = 0; I > 0; i++){
if(I & 1){
P++;
}
bit[i] = I & 1;
I >>= 1;
}
printf("The parity of ");
for(j = i - 1; j >= 0; j--){
printf("%d", bit[j]);
}
printf(" is %d (mod 2).\n", P);
}
return 0;
}