值得一提的是,我自己在debug的时候,添加了一行system("pause");最后提交的时候却忘记删掉了,导致差错查了很久。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//1. 读入数据,计算所有的位数
//2. 计算1的个数
//3. 使用欧几里得算法找到最大公约数
//4. 输出
int count(char c);
int Gcd(int m,int n);
int main()
{
int n;
char str[121];
char len;
char c;
int k;
int Total,C; //Big C is for count '1's
int gcd;
scanf("%d",&n);
getchar();
while(n--){
gcd = 1;
gets(str);
Total = 8*strlen(str);
C = 0;
for(k=0; k<strlen(str); k++){
c = str[k];
C += count(c);
}
gcd = Gcd(Total,C);
printf("%d/%d\n",C/gcd,Total/gcd);
}
return 0;
}
int count(char c){
unsigned char t;
int tmp = 0;
int i;
t = 1;
for(i=0;i<8;i++){
if(c&t) tmp++;
t <<= 1;
}
return tmp;
}
int Gcd(int a,int b)//求两个数的最大公约数
{
if(b == 0)return a;
else return Gcd(b,a%b);
}