九度-题目1138:进制转换

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;
}

 

posted @ 2017-06-09 12:11  悟空的爸爸  阅读(336)  评论(0编辑  收藏  举报