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

10进制 VS 2进制

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

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

vector<int> div(vector<int> &A,int b,int &r){
    vector<int> C;//存商
    r=0;
    for(int i=A.size()-1;i>=0;i--){
        r=r*10+A[i];
        C.push_back(r/b);//...百十个
        r%=b;
    }
    reverse(C.begin(),C.end());//个十百千万...
    //去除前导零
    while(C.size()>1&&C.back()==0) C.pop_back();
    return C;
}
vector<int> mul(vector<int> &A,int b){
    int t=0;//进位
    vector<int> C;
    for(int i=0;i<A.size();i++){
        t+=A[i]*b;
        C.push_back(t%10);//个十百千万...
        t/=10;
    }
    while(t){
        C.push_back(t%10);
        t/=10;
    }
    return C;
}
vector<int> add(vector<int> &A,int b){
    int t=b;
    vector<int> C;
    for(int i=0;i<A.size();i++){
        t+=A[i];
        C.push_back(t%10);//个十百千万...
        t/=10;//进位
    }
    while(t){
        C.push_back(t%10);
        t/=10;
    }
    return C;
}
int main() {
    string a;
    cin>>a;
    vector<int> A;
    for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');//个十百千万...
    int r;//余数
    vector<int> Y;//存余数
    if(a.size()==1&&a[0]=='0') Y.push_back(0);
    while(A.size()>1||A.back()){
        A=div(A,2,r);
        Y.push_back(r);
    }
    vector<int> res={0};
    for(int i=0;i<Y.size();i++){
        res=mul(res,2);
        res=add(res,Y[i]);
    }
    // for(int i=Y.size()-1;i>=0;i--) cout<<Y[i];
    // cout<<endl;
    for(int i=res.size()-1;i>=0;i--) cout<<res[i];
    return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
今天 12:11
点赞 评论 收藏
分享
05-21 15:47
门头沟学院 Java
浪漫主义的虹夏:项目有亮点吗,第一个不是纯玩具项目吗,项目亮点里类似ThreadLocal,Redis储存说难听点是花几十分钟绝大部分人都能学会,第二个轮子项目也没体现出设计和技术,想实习先沉淀,好高骛远的自嗨只会害了自己
点赞 评论 收藏
分享
05-27 14:57
西北大学 golang
强大的社畜在走神:27届真不用急,可以搞点项目、竞赛再沉淀沉淀,我大二的时候还在天天打游戏呢
投递华为等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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