题解 | #10进制 VS 2进制#

10进制 VS 2进制

http://www.nowcoder.com/practice/fd972d5d5cf04dd4bb4e5f027d4fc11e

#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
using namespace std;
string Divide(string str,int x){
    int remainder=0;
    int temp;
    for(int i=0;i<str.size();++i){
        temp=remainder*10+str[i]-'0';
        str[i]=temp/x+'0';
        remainder=temp%x;
    }
    int pos=0;
    while(str[pos]=='0'){
        ++pos;
    }
    return str.substr(pos);
}
string Multiply(string str,int x){
    int advance=0;
    for(int i=str.size()-1;i>=0;--i){
        advance=(str[i]-'0')*x+advance;
        str[i]=advance%10+'0';
        advance/=10;
    }
    if (advance != 0) {
        str.insert(0, "1");
    }
    return str;
}
string Add(string str,int x){
    int advance=x;
    for(int i=str.size()-1;i>=0;--i){
        advance=str[i]-'0'+advance;
        str[i]=advance%10+'0';
        advance/=10;
    }
    if(advance!=0){
        str.insert(0, "1");
    }
    return str;
}
int main(){
    string number;
    cin>>number;
    string binary;
    while(number.size()){
        binary.push_back((number[number.size()-1]-'0')%2+'0');
        number=Divide(number, 2);
    }
    string resultant="0";
    for(int i=0;i<binary.size();++i){
        resultant=Multiply(resultant, 2);
        resultant=Add(resultant,binary[i]-'0');
    }
    cout<<resultant<<endl;
    return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-23 16:31
点赞 评论 收藏
分享
06-23 17:45
门头沟学院 Java
里面的项目啥的真的有用吗?&nbsp;这些人是割韭菜吗?
HellowordX:很简单,如果你有自己稳定的学习路线和获取知识的方式就没必要,如果你啥都不懂的小白或者里边有你感兴趣的知识,我觉得挺值,我也经常为知识付费,因为时间精力有限,很多东西我不可能自己重复造轮子
点赞 评论 收藏
分享
05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
点赞 评论 收藏
分享
Ncsbbss:又想干活又想要工资,怎么什么好事都让你占了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务