C 下面的节目";连续计算1';二元数“的s”;当输入超过8位数时显示不同的ans?

C 下面的节目";连续计算1';二元数“的s”;当输入超过8位数时显示不同的ans?,c,C,我尝试过不同的输入,当它超过7或8位数值时,它只是显示一些错误的答案作为输出,但它在我的大多数情况下工作正常 #include <stdio.h> #include <stdlib.h> int bin(unsigned long long int n){//gave function for binary convertion if(n==0) return 0; else return (n%2+10*bin(n/2)); } in

我尝试过不同的输入,当它超过7或8位数值时,它只是显示一些错误的答案作为输出,但它在我的大多数情况下工作正常

#include <stdio.h>
#include <stdlib.h>

int bin(unsigned long long int n){//gave function for binary convertion
    if(n==0)
    return 0;
    else
    return (n%2+10*bin(n/2));
}

int main()
{
    unsigned long long int n,x;/*I even gave high digit data type*/
    int i, v, count=0, max=0;
    scanf("%llu",&n); /*if input is >8-digit output is wrong*/
    x = bin(n);
    v = floor(log10(x))+1; /*Its length*/
    int a[v];
    for(i = v-1; i >= 0; i--){ /*string it in array*/
        a[i] = x%10;
        x = x/10;
    }
    for(i = 0; i < v; i++){
        if(a[i] == 0){
        count = 0;}
        else{
        count++;}
        if(max < count){
        max = count;}
    }
    printf("%d",max);/*I gave 99999999 output is 8 but its shows 9*/
}
#包括
#包括
int-bin(unsigned long long int n){//给出了用于二进制转换的函数
如果(n==0)
返回0;
其他的
返回(n%2+10*bin(n/2));
}
int main()
{
无符号长整型n,x;/*我甚至给出了高位数据类型*/
整数i,v,计数=0,最大值=0;
scanf(“%llu”,&n);/*如果输入大于8位,则输出错误*/
x=料仓(n);
v=地板(log10(x))+1;/*其长度*/
int a[v];
对于(i=v-1;i>=0;i--){/*在数组中字符串它*/
a[i]=x%10;
x=x/10;
}
对于(i=0;i
您的程序有许多问题。以下是一个例子:

int bin(unsigned long long int n){
^^^
该函数返回一个
int
,因此即使是很小的数字,计算也会溢出:

printf("%d\n", bin(1023));  // will print 1111111111 (fine)
printf("%d\n", bin(1024));  // will/may print 1410065408 (ups - very bad)
即使你改成

unsigned long long int bin(unsigned long long int n){
溢出很快就会发生

在中,我建议您使用
&
运算符直接查看数字的二进制模式

我不会为您解决整个任务,但这里有一些代码可以帮助您

#include <stdio.h>
#include <stdlib.h>

int main()
{
  size_t t = 1;
  size_t limit;
  size_t n;
  if (scanf("%zu", &n) != 1)
  {
    printf("Illegal input\n");
    exit(1);
  }

  limit = 8 * sizeof n;  // Assume 8 bit chars
  for (size_t i = 0; i < limit; ++i)
  {
    if (n & t)
    {
      printf("Bit %zu is 1\n", i);
    }
    else
    {
      printf("Bit %zu is 0\n", i);
    }
    t = t << 1;
  }

  return 0;
}
#包括
#包括
int main()
{
尺寸t=1;
尺寸限制;
尺寸;
如果(scanf(“%zu”,&n)!=1)
{
printf(“非法输入”);
出口(1);
}
limit=8*sizeof n;//假定为8位字符
对于(尺寸i=0;it=t
floor(log10(x))由于将结果转换为
int
时会出现小的舍入错误,因此,
不是确定数字计数的可靠方法。标题建议您要对值为1的连续二进制数字进行计数。实际上,您似乎在对值不同于0的连续十进制数字进行计数……并且没有
\include
>对于
floor
log10
。请启用所有警告并修复它们。无论如何,创建一个数字值数组会给您带来很多麻烦,这对您弊大于利。无论是哪种情况,您都不需要这样的数组。提示:删除所有花哨的浮点函数,如
floor
log10
。它们在这里没有任何用途。请查看二进制运算符
&