int convert(int v, int r) //v=value, r=base
{
int result=0;
int i=0;
volatile int remainder = 0;
while(v > 0){
remainder = v%r; //get remainder
v /= r; // find the new divisor
i++;
}
return result;
}
int main(){
int value = 6; //convert decimal 6 to binary
int base = 2;
volatile int result = 0;
result = convert(value,base);
printf(value, base);
int base16 = 16;
int value16 = 50;
volatile int result16 = 0;
我得到了一个带有 while 循环和 main 的模板,作为编写将十进制数转换为任意基数的程序的起点。鉴于代码中已有数学信息,如何编写打印语句?
最佳答案
您的 convert
函数所做的就是返回 0。废弃该函数并重新开始。你的想法是正确的
while(v > 0){
remainder = v%r;
v /= r;
但是您需要单独存储每个余数。将 v
对 r
取模,得到 v
和 r
之间除法的余数。每个余数都会给出从最低顺序到最高顺序的下一个位值。做这样的事情
int convert (int[], int, int);
int print_base2 (int[], int);
int main ()
{
int value = 6;
int base = 2;
int result[40]; // Enough space for binary if INT_MAX is 2^31 - 1
int places_written, i;
places_written = convert (result, value, base);
if (base == 2)
print_base2 (result, places_written);
}
int convert (int result[], int value, int base)
{
int remainder, i = 0;
while (value > 0) {
remainder = value % base; // Get next place value
value /= base; // Move over value by one place
result[i++] = remainder; // Store the place value
}
return i;
}
void print_base2 (int result[], int places_written)
{
int i;
// Go backwards and print each value
for (i = places_written; i > 0; i--) {
if (result[i - 1] == 1)
printf ("%c", '1');
else if (result[i - 1] == 0)
printf ("%c", '0');
}
}
注意:如果您只想使用基数 2,有更好的方法来获取和打印数字,但您可以基于 print_base2
为其余函数建模。并停止声明所有 volatile
。这是个坏主意。
编辑:您应该在 while 循环之前检查 convert
中的 base
是否为零,因为如果 base
为零,您的程序将崩溃。
关于c - 用 C 编写代码将 Decimal 转换为任意基数 我哪里出错了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48737368/