• 大小: 4KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-14
  • 语言: C/C++
  • 标签: C++  大整数  bigint  

资源简介

自定义的C++有符号大整数类型bigint

资源截图

代码片段和文件信息

#include “bigint.h“
using namespace std;

//////////////////////////////////////////////////////////////
void bigint::format()
{
    int len = strlen(arr);
    arr[len] = 0;
    for(int i=len-1; i>0; i--){
        arr[MAX_LEN-len+i] = arr[i]-48; // 数字字符转转为数值 
        arr[i] = 0;
    }  
    if(arr[0]==‘-‘) arr[0] = 1;
    else if(arr[0]==‘+‘) arr[0] = 0;
    else{
        arr[MAX_LEN-len] = arr[0]-48;
        arr[0] = 0;
    }
}

bigint::bigint(int a)
{
    bzero();
    itoa(a arr 10);    
    format();
}

bigint::bigint(const char *str)
{
    bzero();
    const char *c = str;
    char *p = arr;
    if(*c == ‘+‘ || *c == ‘-‘)
        *p++ = *c++;
    while(*c)
    {
        if(*c>=‘0‘ && *c<=‘9‘)
            *p++ = *c++;
        else break;
    }
    *p = ‘\0‘;
    format();
}

bigint::bigint(const bigint &obj)
{
    for(int i=0; i        arr[i] = obj.arr[i];
}

bigint& bigint::operator=(const bigint &obj)
{
    if(this == &obj) return *this;
    for(int i=0; i        arr[i] = obj.arr[i];
    return *this;
}

//////////////////////////////////////////////////////////////////////
bigint& bigint::operator++()
{
    int jw len = length();
    if(arr[0] == 0){        
        for(int i=MAX_LEN-1; i>MAX_LEN-len-2; i--)
        {
            ++arr[i];
            if(arr[i]>9)
                arr[i] = arr[i] % 10;
            else break;
        }
    }
    else{
        for(int i=MAX_LEN-1; i>MAX_LEN-len-2; i--)
        {
            --arr[i];
            if(arr[i]>9)
                arr[i] = arr[i] % 10;
            else break;
        }
    }
    return *this;    
}

bigint bigint::operator++(int)
{
    bigint ret(*this);
    ++*this;
    return ret;
}
bigint& bigint::operator--()
{
    int jw len = length();
    if(arr[0] == 0){        
        for(int i=MAX_LEN-1; i>MAX_LEN-len-2; i--)
        {
            --arr[i];
            if(arr[i]>9)
                arr[i] = arr[i] % 10;
            else break;
        }
    }
    else{
        for(int i=MAX_LEN-1; i>MAX_LEN-len-2; i--)
        {
            ++arr[i];
            if(arr[i]>9)
                arr[i] = arr[i] % 10;
            else break;
        }
    }
    return *this; 
}

bigint bigint::operator--(int)
{
    bigint ret(*this);
    --*this;
    return ret;
}

bigint bigint::operator-() const
{
    bigint ret = *this;
    ret.arr[0] = 1-ret.arr[0];
    return ret;    
}

bigint bigint::abs() const
{
    bigint ret = *this;
    ret.arr[0] = 0;
    return ret;    
}
///////////////////////////////////////////////////////////////////
bool bigint::absbigger(const bigint &obj) const
{
    for(int i=1; i        if(arr[i] > obj.arr[i])
            return true;
        else if(arr[i] < obj.arr[i])
            return false;
    }
    return false;

bool bigint::abssmaller(const bigint &obj) const
{
    fo

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-03-23 15:05  bigint\
     文件        5464  2012-03-23 14:56  bigint\bigint.cpp
     文件        2395  2012-03-23 14:48  bigint\bigint.h
     文件        2901  2012-03-23 14:44  bigint\bigint_operator.cpp
     文件        3923  2012-03-23 14:52  bigint\main.cpp
     文件          80  2012-03-23 15:07  bigint\readme.txt

评论

共有 条评论