gpt4 book ai didi

c - 当输入超过 8 位值时,以下程序 "Counting consecutive 1' s 的二进制 no"显示不同的 ans?

转载 作者:行者123 更新时间:2023-11-30 21:05:54 24 4
gpt4 key购买 nike

我尝试了不同的输入,当它超过 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){
^^^

该函数返回一个 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;
}

关于c - 当输入超过 8 位值时,以下程序 "Counting consecutive 1' s 的二进制 no"显示不同的 ans?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52140383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com