【学习笔记】〖九度OJ〗题目1138:进制转换

来源:互联网 发布:淘宝手提包品牌 编辑:程序博客网 时间:2024/06/05 22:43

题目1138:进制转换

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:1002

解决:421

题目描述:

将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。

输入:

多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)

输出:

每行输出对应的二进制数。

样例输入:
0138
样例输出:
01111000
来源:
2008年北京大学软件所计算机研究生机试真题
答疑:
解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-7861-1-1.html
本题模拟手算进行大数除法,对大整数进行除二操作,将除法过程单独写为函数能让程序思路更清晰。


#include<iostream>using namespace std; char src[200]={0};int srci[200] = {0};char res[200]={0};  int devide(int len){    int carry = 0;    for (int i=0; i<len; i++)    {        int num = (carry*10 + srci[i]) / 2;        carry = srci[i] % 2;        srci[i] = num;    }    return carry;} //判断srci是否为0bool isZero(int len){    for (int i=len-1; i>=0; i--)    {        if (srci[i] != 0)        {            return false;        }    }    return true;} int main(){         while (cin >> src)    {        int len=0, i=0, j=0;        while (src[len]!='\0')        {            srci[len] = src[len] - '0';            len++;        }         int resl = 0;        do        {            res[resl++] = devide(len) + '0';        }while (!isZero(len));         for (i=resl-1; i>=0; i--)        {            cout << res[i];        }        cout << endl;    }    return 0;}



0 0
原创粉丝点击