对于编程分配,我需要在C中编写函数INTEGER
,它接受输入to_base(n,x)
并将其转换为基数x
,其中n
是小数号码和x
可以表示为n
。有谁知道如何去做这件事?
我设法编写了一个使用递归除法改变为二进制的函数,但我不知道如何推广它。
2^y
答案 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循环会做,你必须分开,直到什么都没有。
我发布的示例很简单,没有函数参数,但是全局变量,因为这是本书那一章的水平,但我认为这将给你一个很好的方向,你可以进一步详细说明