码迷,mamicode.com
首页 > 其他好文 > 详细

九度-题目1138:进制转换

时间:2017-06-09 13:19:07      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:set   strlen   job   code   for   reverse   计算机研究生   pre   class   

http://ac.jobdu.com/problem.php?pid=1138

 

题目描述:

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

输入:

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

输出:

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

样例输入:
0
1
3
8
样例输出:
0
1
11
1000
来源:
2008年北京大学软件所计算机研究生机试真题
十进制转化二进制最基本的还是除二取余法。这里只是将数字已字符串形式给出,核心的算法是没有改变的。
#include <iostream>
#include <string.h>
#include <cstring>

char binvec[1001];

using namespace std;

void decTobin(string str){
    int size=0;
    int len = str.size();
    int sum=1;  // 初始化sum不为0即可
    while(sum){
        sum=0;
        for(int i=0; i<len; i++)
        {
            int tmp=(str[i]-0)/2; //一个数除以2就是每个位除以2
            sum+=tmp;   //当这个数每个位全为0的时候,sum==0

            if(i==len-1){
                binvec[size++]=(str[i]-0) % 2+ 0;
            }
            else{
                str[i+1]=str[i+1]+(str[i]-0)%2*10;
            }

            str[i]=tmp+0;
        }
    }

}

void reverse_out(){
    //cout << binvec << endl;

    for(int i=strlen(binvec)-1; i>=0; i--){
        cout << binvec[i] ;
    }
    cout << endl;

}

int main()
{
    string str;
    while(cin>>str){
        memset(binvec, \0, sizeof(binvec));
        decTobin(str);
        reverse_out();
    }
    return 0;
}

 

九度-题目1138:进制转换

标签:set   strlen   job   code   for   reverse   计算机研究生   pre   class   

原文地址:http://www.cnblogs.com/shenckicc/p/6971417.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!