关于#c语言#的问题:求一个由1和0组成的正整数中包含1的个数

求一个由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);
}

img

j=a/pow(10,i);
这是整数计算
其实这个你每次/2取余数即可。

你这代码问题太多了
j没有初值就直接去取值,j如果初始值是0那么循环根本没走
循环除以10是个简单的办法
其实有个取巧的办法,就是你不要定义成int
而定义成char[],然后看字符串里有几个'1'