用c语言写一下给出一个十进制非负整数,求其二进制表示中有多少个1。
时间: 2023-03-06 12:33:19 浏览: 101
我们可以使用位运算符来实现这一目标。将给定的十进制数字n与1做按位与运算,如果结果为1,则说明n的最低位取值为1,count计数器加1,然后再将n右移一位,重复以上步骤,直到n变为0,则count计数器中存储的值就是该十进制数字n的二进制表示中有多少个1.
相关问题
c语言代码实现利用栈实现十进制向二进制转换,输入若干个十进制非负整数,输出他们的二进制形式
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int top;
int data[MAX_SIZE];
} Stack;
void init(Stack* s) { // 初始化栈
s->top = -1;
}
int is_empty(Stack* s) { // 判断栈是否为空
return s->top == -1;
}
int is_full(Stack* s) { // 判断栈是否已满
return s->top == MAX_SIZE - 1;
}
void push(Stack* s, int x) { // 入栈
if (is_full(s)) {
printf("Stack Overflow\n");
exit(1);
}
s->top++;
s->data[s->top] = x;
}
int pop(Stack* s) { // 出栈
if (is_empty(s)) {
printf("Stack Underflow\n");
exit(1);
}
int x = s->data[s->top];
s->top--;
return x;
}
void decimal_to_binary(int n) { // 十进制转二进制
Stack s;
init(&s); // 初始化栈
while (n) {
push(&s, n % 2); // 余数入栈
n /= 2;
}
while (!is_empty(&s)) {
printf("%d", pop(&s)); // 依次出栈并输出
}
printf("\n");
}
int main() {
int n;
printf("Please enter decimal non-negative integers (enter -1 to end):\n");
while (1) {
scanf("%d", &n);
if (n == -1) {
break;
}
decimal_to_binary(n); // 十进制转二进制
}
return 0;
}
写出一段将一个长度最多为 30 位数字的十进制非负整数转换为二进制数输出的c语言代
码:
`
#include <stdio.h>
int main() {
char decimal[31];
scanf("%s", decimal); // 输入十进制数
int binary[120] = {0}; // 二进制数最多占 120 位,初始化为 0
int len = 0; // 记录二进制数的位数
int i = 0;
while (decimal[i] != '\0') {
int bit = decimal[i] - '0'; // 将字符转换为数字
for (int j = len; j >= 0; j--) {
binary[j + 1] += binary[j] / 2; // 进位
binary[j] = (binary[j] % 2) * 10 + bit; // 计算当前位的值
}
len++; // 位数加 1
i++; // 处理下一位
}
if (binary[len] == 0) len--; // 去掉前导零
for (int j = len; j >= 0; j--) {
printf("%d", binary[j]); // 从高位到低位输出二进制数
}
printf("\n");
return 0;
}
```
该程序使用字符数组存储输入的十进制数,使用 int 数组存储转换后的二进制数。处理每一位时,先将字符转换为数字,然后从低位到高位依次计算出二进制数的每一位。在计算过程中,需要进行进位操作。最后,从高位到低位输出二进制数,并去掉前导零。
阅读全文