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;
    }
}
时间: 2024-10-12 15:50:02

oj---九度oj----大数---进制转换的相关文章

大数进制转换问题

在数据结构课关于栈的这一章中,我们都学过用"模2取余法"来将一个10进制数转换为一个二进制数,进而可以推广到"模n取余法",经其转换为n进制(n任意指定). 确实,这是一个很基础的题目,可你是否想过如果这个10进制数是一个大数(其位数可能上千位,此时用一般数据类型肯定是会溢出的),那么这个问题又如何来求解呢? 当然,也许你会说很简单嘛,自己写一个大数类(当然至少要写一个大数除法才行),或者你用的是Java这种现代化语言,就更轻松了,直接用BigInteger这样的大

大数进制转换

给出一个36进制的大数(0-9,A-Z),将其转为10进制并输出. Input输入:36进制的大数,每一位用0-9,A-Z来表示,A表示10,Z表示35.(A的长度 <= 100000)Output输出:该数的10进制表示Sample Input 1AZ Sample Output 1691 起初做大数据处理的题目,并没有什么功底,就是突然想到可以用数组,所以再次做到这类题时,仍然记得用数组存位,最后倒着输出就好 所以原始是这么写的 超时代码1 #include <iostream> #

POJ1220(大数进制转换)

NUMBER BASE CONVERSION Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4652   Accepted: 2132 Description Write a program to convert numbers in one base to numbers in a second base. There are 62 different digits: { 0-9,A-Z,a-z } HINT: If

hdu-1877(大数+进制转换)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1877 思路:注意考虑0,0的情况. #include<iostream> #include<cstdio> #include<string> #include<algorithm> using namespace std; int m,a,b; string s1,s2; string add(string s1,string s2) { if(s1.lengt

九度oj 题目1080:进制转换

题目描述: 将M进制的数X转换为N进制的数输出. 输入: 输入的第一行包括两个整数:M和N(2<=M,N<=36). 下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出. 输出: 输出X的N进制表示的数. 样例输入: 16 10 F 样例输出: 15 提示: 输入时字母部分为大写,输出时为小写,并且有大数据. 这题初看起来另我头疼,考虑不难但是很麻烦 一开始想的比较绕,准备先把任意进制转换成10进制,再转化成n进制,于是写出了下面的代码 1 #include

哈理工 oj——神奇的进制转换

神奇的进制转换 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 248(150 users) Total Accepted: 175(147 users) Rating: Special Judge: No Description xuxu的数据结构要考试了,所以他在很努力的看书,有一天他看呀看呀看,突然看到一个进制转换的题目,说是要将一个十进制数转换成二进制数,他算呀算呀算,然后就把这个问题解决了..... 可是他很爱思考,他想怎

SDUT OJ 进制转换

进制转换 Time Limit: 1000MS Memory limit: 65536K 题目描述 输入一个十进制数N,将它转换成R进制数输出. 输入 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10). 输出 为每个测试实例输出转换后的数,每个输出占一行.如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等). 示例输入 7 2 23 12 -4 3 示例输出 111 1B -11 就因为0的时候的剪枝,让我

九度OJ小结

1. 高精度问题 可参考题目 题目1137:浮点数加法   http://ac.jobdu.com/problem.php?pid=1137 对于高精度问题可以考虑使用结构体.上述为浮点数加法,因此该结构体可以具有保存小数部分以及整数部分的成员变量,使用数组进行保存.于此同时还要记录下所保存数据的长度,因此还应当有两个int变量,保存整数部分长度和保存小数部分长度. 在C++中对运算符进行重载操作. 运算符函数定义的一般格如下所示: <返回类型说明符> operator <运算符符号&g

九度oj 题目1007:奥运排序问题

九度oj 题目1007:奥运排序问题   恢复 题目描述: 按要求,给国家进行排名. 输入:                        有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号从0到N-1. 第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万). 接下来一行给出M个国家号. 输出:                        排序有4种方式: 金牌总数 奖牌总数 金牌人口比例 奖牌人口比例 对每个国家给出最佳排名排名方式 和 最终排名 格式为: 排名:排名