【问题标题】:any program Decimal to Binary by recursion [closed]通过递归将十进制到二进制的任何程序[关闭]
【发布时间】:2017-10-13 01:05:31
【问题描述】:

我必须编写一个没有forwhile 的递归函数 打印从 0 到给定整数的所有二进制数:

例如如果整数是7 输出是这样的:

(000)
(001)
(010)
(011)
(100)
(101)
(110)
(111)

这是我尝试过的代码:

#include <stdio.h>

/* function declaration */
int print_binary_number(int decimalNo,int count,int arr[]);

int main ()
{
    int a;

    printf("\nPlease enter an integer:\n");
    scanf("%d",&a);

    print_binary_number(a,0,0);
    return 0;
}

int print_binary_number(int decimalNo,int count,int arr[])
{
    int binaryNo,remainder,factor = 1,c;

    if (decimalNo == 0) {
        return 0;
        printf("000");
    }

    if(decimalNo != 0){

        remainder = decimalNo % 2;
        arr[count]=remainder;
        binaryNo = (binaryNo + (remainder * factor));
        factor = factor * 10;

        print_binary_number(decimalNo - 1,count,arr);
        c=1+print_binary_number(decimalNo / 2,count++,arr);

    }
    printf("%d",arr[count]);
    return 0;
}

【问题讨论】:

  • 到目前为止你尝试过什么?为什么要标记 C# 和 C?选择一种语言。
  • 我懂两种语言,我需要 c 或 c# 方面的帮助,我写了一个程序,但它不起作用::
  • 贴出不起作用的代码。
  • 我编辑帖子
  • 您的问题到底是什么?您发布的代码没有按您的预期工作吗?你得到了什么结果?

标签: c recursion binary decimal


【解决方案1】:

此示例满足您的以下需求:

  • 递归
  • 显示范围内的二进制数
  • 您可以指定显示多少位

#include <stdio.h>

void print_binary_numbers(int from, int to, int bits);
void print_binary(int n, int bits);

int main (void){
    int n;
    printf("Please enter an integer: ");
    scanf("%d", &n);
    print_binary_numbers(0, n, 8);
    return 0;
}

/**
 * @param bits Controls the number of displayed bits.
 */
void print_binary(int n, int bits) {
    while (--bits >= 0){
        printf("%s", n & (1 << bits) ? "1" : "0");
    }
}

void print_binary_numbers(int from, int to, int bits) {
    print_binary(from, bits);
    printf("\n");
    if (from < to) {
        print_binary_numbers(from + 1, to, bits);
    }
}

【讨论】:

  • 它必须是一个没有while的递归函数..谢谢你的尝试
  • 递归在第一个例子中
  • Convert.ToString 可能在幕后使用了循环 - 可能不允许??
  • 嗯,它在内部使用了外部方法。 referencesource.microsoft.com/#mscorlib/system/…
  • 我已经添加了详细的实现(递归/循环方法)
【解决方案2】:

通过 C /* 使用 -O2 选项编译 */

#include <stdio.h>

void print_binary_number(int decimalNo, int width, char arr[]);

int main (void){
    int a;
    char arr[32] = {0};

    printf("\nPlease enter an integer:\n");
    scanf("%d", &a);
    int width = 0;
    for(unsigned c = a; c; c >>= 1)
        ++width;
    print_binary_number(a, width, arr);
    return 0;
}

void print_binary_number(int decimalNo, int width, char arr[]){
    for(int i = width-1; i>=0; --i)
        printf("%d", arr[i]);
    printf("\n");
    if(!decimalNo)
        return ;
    for(int i = 0, carry = 1, c; carry; ++i, carry = c){
        c = arr[i] & carry;
        arr[i] ^= carry;
    }
    print_binary_number(decimalNo-1, width, arr);
}

【讨论】:

  • pos += sprintf(&tmp[pos], "%d", (n & ((int)1
  • @majdnassar 你为什么问我?
猜你喜欢
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
  • 2016-05-03
  • 2014-12-05
  • 2019-11-07
  • 2016-01-17
  • 1970-01-01
相关资源
最近更新 更多