将数组形式存储的十进制大整数转换为二进制,但是不输出

相关代码:

int check(int* s,int end)
{
    int i;
    for (i = 0; i <= end; i++)
    {
        if (s[i] != 0)
            break;
    }
    if (i <= end)
        return 1;
    else
        return 0;
}
//转换为二进制,start表示有效数字的最高位,end为有效数字的最后一位
void jz_2(int* s, int start, int end)
{
    int i, j = 0;
    int n=0;//除数
    int r;//余数
    int res[100000];
    //每次循环大整数除以二,使用res存储余数
    while (check(s,end))//循环结束条件为数组s的所有元素均为0
    {
        for (i = start; i < end; i++)
        {
            //从最高位开始,减去n个2,直到s[i]<0,此时n为该位上的商
            for (n = 0; s[i] - 2 * n > 0; n++)
            {
                
            }
            r = s[i] - 2 * n;
            s[i] = n;
            s[i + 1] += r * 10;
        }
        //处理最后一位
        n = 0;
        for (n = 0; s[i] - 2 * n > 0; n++);
        res[j] = s[i] - 2 * n;
        j++;
        s[i] = n;
    }
    for (i = 0; i < j; i++)
        printf("%d", res[i]);
}

截图

img

这里用到的方法是"除2取余,逆序排列"法

具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,一直进行,直到商为小于1时为止,然后把得到的余数倒序排列。


 
#include <stdio.h>
int main() {
    int i = 0, base, j, num[100] ;
    printf("请输入:");
    scanf("%d", &base) ;
    do {
        num[i] = base % 2;
        base = base / 2;
        i++;
        j++;
    } while (base != 0);
    for (j = i - 1; j >= 0; j--)
        printf("%d", num[j]) ;
    return 0;
}

给一份完整代码吧,不知道你的数组怎么定义的

超大数据10进制转2进制详解(可推广到其他进制)/ Codeup 100000579 问题 C: 进制转换
https://blog.csdn.net/qq_31747473/article/details/104851881