题目45:进制转换

来源:互联网 发布:淘宝可以卖酒吗 编辑:程序博客网 时间:2024/05/21 19:34

http://ac.jobdu.com/problem.php?cid=1040&pid=44

题目描述:

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

输入:

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

输出:

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

样例输入:
0138
样例输出:
01111000
// 题目45:进制转换.cpp: 主项目文件。#include "stdafx.h"#include <cstdio>#include <cstring>struct bigInt{char str[203];void Init(char *nStr){strcpy(str,nStr);}bigInt operator /(int k){bigInt res;int t=0,cnt=0;bool flag=true;for(int i=0;str[i];i++){if(flag){if(t*10+(str[i]-'0')>=2){flag=false;res.str[cnt++]=(t*10+(str[i]-'0'))/k+'0';t=(t*10+(str[i]-'0'))%k;}elset=str[i]-'0';}else{res.str[cnt++]=(t*10+(str[i]-'0'))/k+'0';t=(t*10+(str[i]-'0'))%k;}}if(cnt==0)res.str[cnt++]='0';res.str[cnt]='\0';return res;}void changeToBit(){bigInt res,tmp;tmp.Init(str);if(strcmp(tmp.str,"0")==0){res.Init("0");return;}int cnt=0;while(strcmp(tmp.str,"0")!=0){str[cnt++]=(tmp.str[strlen(tmp.str)-1]-'0')%2+'0';tmp=tmp/2;}str[cnt]='\0';}};int main(){    char nStr[33];while(scanf("%s",nStr)!=EOF){bigInt res;res.Init(nStr);res.changeToBit();for(int i=strlen(res.str)-1;i>=0;i--)printf("%c",res.str[i]);printf("\n");}    return 0;}