这个问题一直纠结啊。。。。 不知道为什么老是出错,请各位大虾帮忙...

所有类型的数据在内存中都是以二进制的形式存放的。其中有些位是1,而有些位是0。例如:字符A的二进制表示01000001中有2位是1,6位是0。设sizeof(char)为... 所有类型的数据在内存中都是以二进制的形式存放的。其中有些位是1,而有些位是0。例如:字符A的二进制表示01000001中有2位是1,6位是0。设sizeof(char)为1。
数据密度定义为一块内存数据中1的位的占比。
写程序计算一组字符的数据密度。

Input

第1行:整数n(1≤n≤10)
第2行~n+1行:每行是个数范围为1 ~ 120的一组字符。一组字符中可能包含空格、制表符、汉字、字母、数字、标点符号。

Output

对于每一行中的一组字符,以最简分数形式在一行中输出其数据密度。
分数格式:分子/分母

我的代码如下:
#include <stdio.h>
int main()
{
int i,t;
void solve();
scanf("%d",&t);
for (i=1;i<=t;i++)
{
printf("case #%d:\n",i);
solve();
}
return 0;
}
void solve()
{
char c[120];
int y,sum=0,max=0,j,r,m,n;
getchar();
gets(c);
for(j=0;c[j]!='\0';j++)
{
y=c[j];
while(y!=0)
{sum+=y%2;y=y/2;}
if(sizeof(c[j])==2)
max+=16;
else if(sizeof(c[j])==1)
max+=8;
}
m=sum;n=max;r=n%m;
while(r!=0)
{
n=m;m=r;
r=n%m;
}
r=m;
printf("%d/%d\n",sum/r,max/r);
}
展开
 我来答
xoalyg
推荐于2016-05-26 · TA获得超过4178个赞
知道大有可为答主
回答量:2356
采纳率:100%
帮助的人:2351万
展开全部
/*
3
case #1: A
65
2/8 <==> 25.00%
case #2: A,Bx y@12
65 44 66 120 32 121 64 49 50
24/72 <==> 33.33%
case #3: 计算字符串的数据密度。
188 198 203 227 215 214 183 251 180 174 181 196 202 253 190 221 195 220 182 200 161 163
107/176 <==> 60.80%
Press any key to continue
*/
#include <stdio.h>
#include <string.h>

int main() {
int i,t;
void solve();
scanf("%d",&t);
for (i = 1;i <= t;i++) {
printf("case #%d: ",i);
solve();
}
return 0;
}

void solve() {
char s[120];
int ch,sum = 0,i,size;
fflush(stdin);
gets(s);
for(i = 0;s[i] != '\0';i++) {
ch = s[i];
while(ch != 0) {
if(ch%2) sum++;
ch = ch/2;
}
}
size = 8 * sizeof(char) * strlen(s);
printf("%d/%d <==> %.2lf%%\n",sum,size,100.0 * sum/size);
}
追问
测试数据:"A"--------------1/4
"A,Bx y@12"-----------------1/3
"计算字符串的数据密度。"-----------------------107/176
注意其中的空格和标点符号。
追答
/*
3
case #1: A
65
2/8 25.00%
case #2: A,Bx y@12
65 44 66 120 32 121 64 49 50
24/72 33.33%
case #3: 字符串的数据密度。
215 214 183 251 180 174 181 196 202 253 190 221 195 220 182 200 161 163
88/144 61.11%
Press any key to continue
*/
#include
#include

int main() {
int i,t;
void solve();
scanf("%d",&t);
for (i = 1;i %.2lf%%\n",sum,size,100.0 * sum/size);
}
WWWSVT8COM
2012-04-10 · 超过24用户采纳过TA的回答
知道答主
回答量:82
采纳率:0%
帮助的人:60.3万
展开全部
加20分,我给你检查。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式