首页 > 编程知识 正文

暨南大学研究生复试真题,研究生复试考什么

时间:2023-05-03 15:12:15 阅读:261425 作者:303

描述 将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。 输入 多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数) 输出 每行输出对应的二进制数。 样例输入 0138 样例输出 0111

1000

本题思路:

十进制转换为二进制问题,这种计算在纸上很容易计算是吧,那么如何在计算机中实现呢?首先我们明确一个十进

数反复除上2,位数肯定一直在减少。在本程序里面用num数组存放除以2后的结果。比如说求19的二进制,那么

num[0]=1,num[1]=9是初值。经过一轮迭代后,binary[0]='1',因为19是奇数嘛!num[0]=0,num[1]=9,在

求num[1]时,c=10,因为temp暂存的最高位是奇数1嘛!肯定要借位嘛!如果不借位,结果是4,正确结果是9!!

借位的意思就是次高位得加上10,么么哒~for (int j = i; j < len; j++)这个循环就是从最高位依次除以2

将新结果存放到num矩阵中!如果num[i]=0说明i位被除没了(i位一直是待处理数字的最高位),比如说19/2=9,

num[0]=0,i就变成1,最高位是个位~,最后再讲bianry数组倒着输出一遍,ok结束了,么么哒~亲!!!

#include<stdio.h>char s[35];//十进制数最多30位char binary[200];//二进制最多120位int num[35];int main(){int len;//数字的位数int temp;//记录当前十进制数字的最高位while (scanf("%s", s) != EOF){for (len = 0; s[len]; len++){num[len] = s[len] - '0';}int i = 0; int binary_length = 0;while (i < len)//num[i]永远是非0的待处理数最高位{binary[binary_length++] = num[len - 1] % 2 + '0';//十进制数字最后一位如果是奇数则为1,反之为0int c = 0;for (int j = i; j < len; j++){temp = num[j];num[j] = (num[j] + c) / 2;//j == i时,num[i]存放的是最高位除上2的结果if (temp & 1)//temp是奇数{c = 10;//高位是奇数,高位的下一位除以2绝对得借位!}else { c = 0; }//高位是偶数,不需要借位}if (num[i] == 0)//高位已经为0,{i++;}}for (int j = binary_length - 1; j >= 0; j--){printf("%c", binary[j]);}printf("n");}return 0;}


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。