c - 用 C 编写代码将 Decimal 转换为任意基数 我哪里出错了

标签 c

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;

但是您需要单独存储每个余数。将 vr 取模,得到 vr 之间除法的余数。每个余数都会给出从最低顺序到最高顺序的下一个位值。做这样的事情

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/

相关文章:

c - switch 中的多个 fork() 导致指数执行

c++ - 将clock_gettime移植到windows

c - 首次检测到错误后返回错误代码

c - 具有公共(public)源文件和子项目的正确项目组织

c++ - 如何在 Linux 或 Windows 中为 OS X 编译?

c - 我的C程序中的内存分配问题

c++ - 使用来自更好随机源的随机数播种伪随机生成器

c - 为什么我在编译项目时出现 "multiple definition"错误?

c - C语言打印一行长度的程序

c - 如何将 strtok 与每个非字母字符一起用作分隔符? (C)