oj---九度oj----大数---进制转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oj---九度oj----大数---进制转换相关的知识,希望对你有一定的参考价值。

 

 

struct bigInteger{
    int digit[maxDigits];
    int size;
}

这里digit每一位的权重都乘以10000;

如果不是特别大的数,没必要;乘以10000后,把字符串转化为数字比较麻烦

 

#include<cstdio>
#include<cstring>

#define maxDigits 100

struct bigInteger{
    int digit[maxDigits];
    int size;
    void init(){
        for(int i=0;i<maxDigits;i++) digit[i]=0;
        size = 0;
    }
    void set(int x){
        init();
        do{
            digit[size++]=x%10000;
            x/=10000;
        }while(x!=0);
    }
    void output(){
        for(int i=size-1;i>=0;i--){
            if(i!=size-1) printf("04d",digit[i]);
            else printf("%d",digit[i]);
        }
    }
    bigInteger operator * (int x) const{
        bigInteger ret;
        ret.init();
        int carry=0;
        for(int i=0;i<size;i++){
            int tmp=x*digit[i]+carry;
            carry=tmp/10000;
            ret.digit[ret.size++]=tmp%10000;
        }
        if(carry!=0)
            ret.digit[size++]=carry;
        return ret;
    }
    bigInteger operator + (const big Integer &A) const{
        bigInteger ret;
        ret.init();
        int carry=0;
        for(int i=0;i<A.size||i<size;i++){
            int tmp=digit[i]+A.digit[i]+carry;
            carry=tmp/10000;
            ret.digit[ret.size++]=tmp%10000; 
        }
        if(carry!=0)
            ret.digit[ret.size++]=carry;
        return ret;
    }
    bigInteger operator / (int x) const{
        bigInteger ret;
        ret.init();
        int r=0; //r<-->remainder
        for(int i=size-1;i>=0;i--){
            int t=(r*10000+digit[i])/x;
            r=(r*10000+digit[i])%x;
            ret.digit[i]=t;
        }
        ret.size=0;
        for(int i=0;i<maxDigits;i++){
            if(ret.digit[i]!=0)
                ret.size=i;
        }
        ret.size++;
        return ret;
    }
}

 

以上是关于oj---九度oj----大数---进制转换的主要内容,如果未能解决你的问题,请参考以下文章

九度OJ题目1080:进制转换(java)使用BigInteger进行进制转换

oj---大数运算

九度oj 题目1473:二进制数(stack)

九度oj 题目1466:排列与二进制

九度oj 题目1513:二进制中1的个数

九度OJ-题目1009:二叉搜索树