相关代码:
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]);
}
截图
这里用到的方法是"除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