将无符号十进制更改为基数2 ^ n

时间:2015-12-10 14:44:37

标签: c

对于编程分配,我需要在C中编写函数INTEGER,它接受​​输入to_base(n,x)并将其转换为基数x,其中n是小数号码和x可以表示为n。有谁知道如何去做这件事?

我设法编写了一个使用递归除法改变为二进制的函数,但我不知道如何推广它。

2^y

1 个答案:

答案 0 :(得分:1)

我在使用Kochan手册学习C时做了类似的事情,在第7章我必须解决像你这样的问题,所以我提出了这个解决方案:

// Program to convert a positive integer to another base

#include <stdio.h>
#include <stdbool.h>

int       convertedNumber[64];
long int  numberToConvert;
int       base;
int       digit;

void  getNumberAndBase (void)
{
    bool askAgain = true;

    printf ("Number to be converted? ");
    scanf ("%li", &numberToConvert);

    if (numberToConvert == 0)
    {
        askAgain = false;
    }

    while (askAgain)
    {
        printf ("Base? ");
        scanf ("%i", &base);        
        if  ( base < 2  ||  base > 16 ) {
            printf ("Bad base - must be between 2 and 16\n");
        } else {
            askAgain = false;
        }
    };

}

void  convertNumber (void)
{
    digit = 0;
    do {

         convertedNumber[digit] = numberToConvert % base;
         ++digit;
         numberToConvert /= base;
    }
    while  ( numberToConvert != 0 );
}

void  displayConvertedNumber (void)
{
    const char  baseDigits[16] =
           { '0', '1', '2', '3', '4', '5', '6', '7',
             '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
    int   nextDigit;

    printf ("Converted number = ");

    for (--digit;  digit >= 0; --digit ) {
        nextDigit = convertedNumber[digit];
        printf ("%c", baseDigits[nextDigit]);
    }

    printf ("\n");
}

int main (void)
{
    void  getNumberAndBase (void), convertNumber (void),
          displayConvertedNumber (void);

    while (true)
    {
        getNumberAndBase ();

        if (numberToConvert == 0)
        {
            break;
        }
        convertNumber ();
        displayConvertedNumber ();
    }
    return 0;
}

实际上你不需要一个递归函数,像convertNumber函数那样的while循环会做,你必须分开,直到什么都没有。

我发布的示例很简单,没有函数参数,但是全局变量,因为这是本书那一章的水平,但我认为这将给你一个很好的方向,你可以进一步详细说明