检查数字是否为 2 的幂,以及输入是否为数字

标签 c arrays

<分区>

我想检查数组中的数字是否是 2 的幂。

我写了下面的代码,但它不起作用,它跳过了检查数字是否为 2 的幂并打印最后一句话的部分。

此外,如果有人可以帮助我检查输入是否是数字而不是任何其他字符。 谢谢你! 更新两件事的力量是有效的,但我仍然没有弄清楚如何检查输入是否是数字而不是任何其他字符

   #include <stdio.h>
#include <stdlib.h>
int main()
{
    int x;
    int i;
    int k;
    int count=0;
    int a;
    int sum=0;
    printf("Enter size of input:\n");
    scanf("%d",&x);
    int *numbers=malloc(sizeof(int)*x);
    if (x<0){
      printf("Invalid size\n");
    }
    else {
       printf("Enter numbers:\n");
       for(i=0;i<x;++i){
         scanf("%d",&numbers[i]);

       }
    }
    for(k=0;k<x;++k)
    {
        count=0;
        a=numbers[k];
        while (((numbers[k] % 2) == 0) && numbers[k] > 1){ /* While x is even and > 1 */
             numbers[k]/= 2;
             ++count;
        }
        if (numbers[k]==1&&a!=1){
             printf("The number %d is a power of 2:%d=2^%d\n",a,a,count);
             sum+=count;
        }
    }
    printf("Total exponent num is %d\n",sum);
  return 0;
}

最佳答案

您对二的幂的检查是错误的:您一直将二除以 1,但是下面的 if 错误地检查了 numbers[k ]==0.

检查应该改为 numbers[k]==1,因为当您从 2 的幂中除以所有二进制数时,您最终得到 20,这是 1

注意:您可以使用 this Q&A 中描述的小技巧来检查数字是否为 2 的幂而无需循环。 .

关于检查数字是否为 2 的幂,以及输入是否为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43219826/

相关文章:

c - C 中以最低有效位开始的二进制表示

java - 在一个变量中存储许多不同的字符串

arrays - 具有自定义数据数组的函数

java - 尝试使用 BufferedReader 从 System.in 读取输入并将其放入数组中,但似乎不想给我数组

ruby-on-rails - 将 ActiveRecord 查询结果作为具有所选属性的哈希数组获取

arrays - 在参数请求中传递字符串数组 - swift 5

c - 使用 C 中的函数初始化数组

c - 编辑 gtkcellrenderertext

c - 关于链接数学库的一些问题

c++ - LNK2019, boost::asio