牛客网在线编程_进制转换

题目地址

  • 十进制大数转二进制。

code

#include <bits/stdc++.h>
using namespace std;
char s[35];
struct bigint{
    char s[35];
    int dig[35];
    int cnt;
    void init(){
        memset(dig,0,sizeof(dig));
        cnt=0;
    }
    int read(){
        init();
        int st=scanf("%s",s);
        int n=strlen(s);
        for(int i=n-1;i>=0;i--){
            dig[cnt++]=s[i]-'0';
        }
        return st;
    }
    int size(){
        return cnt;
    }
    bool isZero(){
        if(cnt==1 && dig[0]==0){
            return true;
        }else{
            return false;
        }
    }
    int mod(int x){
        return dig[0]%2;
    }
    void divide(int x){
        int t=dig[cnt-1];
        while(cnt>1 && t<x){
            dig[cnt-1]=0;
            cnt--;
            t=t*10+dig[cnt-1];
        }
        if(t<x){
            cnt=1;
            dig[0]=0;
            return;
        }
        for(int i=cnt-1;i>=0;i--){
            dig[i]=t/x;
            t%=x;
            if(i>0){
                t=t*10+dig[i-1];
            }
        }
    }
    void write(){
        for(int i=cnt-1;i>=0;i--){
            printf("%d",dig[i]);
        }
        printf("
");
    }
}a;
int main(){
    while(~a.read()){
        if(a.isZero()){
            printf("0
");
        }else{
            stack<int> st;
            while(!a.isZero()){
                //a.write();
                st.push(a.mod(2));
                a.divide(2);
            }
            printf("siz %d
",st.size());
            while(!st.empty()){
                printf("%d",st.top());
                st.pop();
            }
            printf("
");
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/zxcoder/p/12274330.html