求一个由1和0组成的正整数中包含1的个数
#include
#include
int main(void)
{
int a,i,j,digit,count,m;
count=0;
scanf("%d",&a);
for (i=0;j!=0;i++)
{j=a/pow(10,i);
digit=i;
}
printf("%d\n",digit);
for(m=digit;m!=0;m--)
{
if(a/pow(10,m-1)==1)
{
count++;
a=a-pow(10,m-1);
}
else
{a=a;
}
}
printf("%d",count);
}
输出一直是0,为什么呢
for (i=0;j!=0;i++)
j你都没初始化啊。
给你改个简单版本:
include <stdio.h>
int main()
{
int n,count = 0;
scanf("%d",&n);
while(n>0)
{
if(n%10==1)
count++;
n=n/10;
}
printf("%d",count);
}
第15行pow(10,m-1)前面加个(int)将其转为int型整数即可,修改如下:
#include<stdio.h>
#include<math.h>
int main(void) {
int a,i,j,digit,count,m;
count=0;
scanf("%d",&a);
for (i=0; j!=0; i++) {
j=a/pow(10,i);
digit=i;
}
printf("%d\n",digit);
for(m=digit; m!=0; m--) {
// printf("a=%d,pow(10,%d)=%f\n",a,m-1,pow(10,m-1));
if(a/((int)pow(10,m-1))==1) {
// printf("==1\n");
count++;
a=a-pow(10,m-1);
} else {
a=a;
}
}
printf("%d",count);
}
j=a/pow(10,i);
这是整数计算
其实这个你每次/2取余数即可。
你这代码问题太多了
j没有初值就直接去取值,j如果初始值是0那么循环根本没走
循环除以10是个简单的办法
其实有个取巧的办法,就是你不要定义成int
而定义成char[],然后看字符串里有几个'1'