亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bignum.cpp

?? 處理大數 能夠處理負數 加減乘除優先順序
?? CPP
?? 第 1 頁 / 共 3 頁
字號:

string BigInt::toString()
{
    string s = ( sign >= 0 ? "" : "-" );
    for( int i = size - 1; i >= 0; i-- )
        s += ( digits[i] + '0' );
    if( size == 0 ) s += '0';
    return s;
}

void BigInt::print()        //FIXME: make more efficient
{
    cout << toString();
}

void BigInt::printWithCommas( ostream &out )
{
    if( sign < 0 ) out.put( '-' );
    for( int i = size - 1; i >= 0; i-- )
    {
        out.put( digits[i] + '0' );
        if( !( i % 3 ) && i ) out.put( ',' );
    }
    if( size == 0 ) out.put( '0' );
}

void BigInt::grow()
{
    char *olddigits = digits;
    int oldCap = capacity;
    capacity *= 2;
    digits = new char[capacity];
    memcpy( digits, olddigits, oldCap );
    memset( digits + oldCap, 0, oldCap );
    delete [] olddigits;
}

BigInt BigInt::operator++()
{
    operator+=( 1 );
    return *this;
}

BigInt BigInt::operator++( int )
{
    return operator++();
}

BigInt BigInt::operator--()
{
    operator-=( 1 );
    return *this;
}

BigInt BigInt::operator--( int )
{
    return operator--();
}

BigInt BigInt::operator-()
{
    BigInt result( *this );
    result.sign *= -1;
    return result;
}

BigInt BigInt::operator+( int n )
{
    BigInt result( *this );
    result += n;
    return result;
}

BigInt BigInt::operator+( BigInt n )
{
    BigInt result( *this );
    result += n;
    return result;
}

BigInt &BigInt::operator+=( int n )
{
    if( size == capacity ) grow();

    int nsign = sig( n );
    if( !nsign ) return *this;
    if( !sign ) sign = nsign;
    if( sign == nsign )
    {
        n *= nsign;
        int carry = 0;
        int i;
        for( i = 0; n || carry; i++ )
        {
            int dig = n % 10;
            int newdig = digits[i] + dig + carry;
            digits[i] = newdig % 10;
            carry = newdig / 10;
            n /= 10;
        }
        size = max( i, size );
    }
    else operator-=( -n );
    return *this;
}

BigInt &BigInt::operator+=( BigInt n )
{
    int maxS = max( size, n.size ) + 1;
    while( maxS >= capacity ) grow();        //FIXME: this is stupid

    if( !n.sign ) return *this;
    if( !sign ) sign = n.sign;
    if( sign == n.sign )
    {
        int carry = 0;
        int i;
        for( i = 0; i < maxS - 1 || carry; i++ )
        {
            int newdig = carry;
            if( i < size ) newdig += digits[i];
            if( i < n.size ) newdig += n.digits[i];
            digits[i] = newdig % 10;
            carry = newdig / 10;
        }
        size = max( i, size );
    }
    else
    {
        n.sign *= -1;
        operator-=( n );
        n.sign *= -1;
    }
    return *this;
}

BigInt BigInt::operator-( int n )
{
    BigInt result( *this );
    result -= n;
    return result;
}

BigInt BigInt::operator-( BigInt n )
{
    BigInt result( *this );
    result -= n;
    return result;
}

BigInt &BigInt::operator-=( int n )
{
    if( size == capacity ) grow();

    int nsign = sig( n );
    if( !nsign ) return *this;
    if( !sign ) sign = 1;
    if( sign == nsign )
    {
        BigInt bin = n;
        if( sign >= 0 && *this < bin || sign < 0 && *this > bin )
        {
            // Subtracting a bigger number
            operator=( toInt() - n );
            return *this;
        }

        n *= nsign;
        int carry = 0;
        int i;
        for( i = 0; n || carry; i++ )
        {
            int dig = n % 10;
            int newdig = digits[i] - dig + carry;
            if( newdig < 0 ) newdig += 10, carry = -1;
            else carry = 0;
            digits[i] = newdig;
            n /= 10;
        }
        normalize();
    }
    else operator+=( -n );
    return *this;
}

BigInt &BigInt::operator-=( BigInt n )
{
    int maxS = max( size, n.size ) + 1;
    while( maxS >= capacity ) grow();        //FIXME: this is stupid

    if( !n.sign ) return *this;
    if( !sign ) sign = 1;
    if( sign == n.sign )
    {
        if( sign >= 0 && *this < n || sign < 0 && *this > n ) 
        {
            // Subtracting a bigger number
            BigInt tmp = n;
            tmp -= *this;
            *this = tmp;
            sign = -sign;
            return *this;
        }

        int carry = 0;
        int i;
        for( i = 0; i < maxS - 1; i++ )
        {
            int newdig = carry;
            if( i < size ) newdig += digits[i];
            if( i < n.size ) newdig -= n.digits[i];
            if( newdig < 0 ) newdig += 10, carry = -1;
            else carry = 0;
            digits[i] = newdig;
        }
        if( carry )     // Subtracted a bigger number, need to flip sign
        {
            if( i ) digits[0] = 10 - digits[0];
            size = ( i ? 1 : 0 );
            for( int j = 1; j < i; j++ )
            {
                digits[j] = 9 - digits[j];
                if( digits[i] ) size = j + 1;
            }
            sign *= -1;
        }
        normalize();
    }
    else
    {
        n.sign *= -1;
        operator+=( n );
        n.sign *= -1;
    }
    return *this;
}

BigInt BigInt::operator*( int n )
{
    BigInt result( 0, size + ( int )sizeof( n ) * 8 );
    int nsign = sig( n );
    n *= nsign;
    result.sign = sign * nsign;
    if( !result.sign ) return result;

    int i, j;
    for( i = 0; n; i++ )
    {
        int dig = n % 10;
        if( dig )
        {
            int carry = 0;
            for( j = 0; j < size || carry; j++ )
            {
                int newDig = result.digits[i + j] + ( j < size ? dig * digits[j] : 0 ) + carry;
                result.digits[i + j] = newDig % 10;
                carry = newDig / 10;
            }
        }
        n /= 10;
    }
    result.size = i + j - 1;
    return result;
}

BigInt BigInt::operator*( BigInt n )
{
    BigInt result( 0, size + n.size );

    result.sign = sign * n.sign;
    if( !result.sign ) return result;

    int i, j;
    for( i = 0; i < n.size; i++ )
    {
        if( n.digits[i] )
        {
            int carry = 0;
            for( j = 0; j < size || carry; j++ )
            {
                int newDig =
                    result.digits[i + j] +
                    ( j < size ? n.digits[i] * digits[j] : 0 ) +
                    carry;
                result.digits[i + j] = newDig % 10;
                carry = newDig / 10;
            }
        }
    }
    result.size = i + j - 1;

    return result;
}

void BigInt::operator*=( int n )
{
    operator=( operator*( n ) );
}

void BigInt::operator*=( BigInt n )
{
    operator=( operator*( n ) );
}

BigInt BigInt::operator/( int n )
{
    if( !n ) n /= n;        //XXX: force a crash

    BigInt result( *this );
    result /= n;
    return result;
}

BigInt BigInt::operator/( BigInt n )
{
    if( !n ) n.size /= n.size;       //XXX: force a crash

    BigInt result( *this );
    result /= n;
    return result;
}

void BigInt::operator/=( int n )
{
    divide( n );
}

void BigInt::operator/=( BigInt n )
{
    divide( n );
}

int BigInt::operator%( int n )
{
    BigInt tmp( *this );
    return tmp.divide( n );
}

void BigInt::operator%=( int n )
{
    operator=( divide( n ) );
}

BigInt BigInt::operator%( BigInt n )
{
    BigInt tmp( *this );
    return tmp.divide( n );
}

void BigInt::operator%=( BigInt n )
{
    operator=( divide( n ) );
}

int BigInt::divide( int n )
{
    if( !n ) n /= n;        //XXX: force a crash

    int nsign = sig( n );
    n *= nsign;
    if( !sign ) return 0;
    sign *= nsign;

    int tmp = 0;
    for( int i = size - 1; i >= 0; i-- )
    {
        tmp *= 10;
        tmp += digits[i];
        digits[i] = tmp / n;
        tmp -= digits[i] * n;
    }
    normalize();
    return tmp;
}

BigInt BigInt::divide( BigInt n )
{
    if( !n ) n.size /= n.size;         //XXX: force a crash

    if( !sign ) return 0;
    sign *= n.sign;

    int oldSign = n.sign;
    n.sign = 1;

    BigInt tmp( 0, size );
    for( int i = size - 1; i >= 0; i-- )
    {
        tmp *= 10;
        tmp += digits[i];
        digits[i] = 0;
        while( tmp >= n ) { tmp -= n; digits[i]++; }
    }
    normalize();

    n.sign = oldSign;

    return tmp;
}

// This is only exact to the first 15 or so digits, but it is
// never an over-estimate
BigInt BigInt::operator*( long double n )
{
    // the number of digits after the decimal point to use
    int DIGS_AFTER_DOT = 15;

    int nsign = sig( n );
    n *= nsign;
    int ndigs = n >= 1 ? ( int )log10( n ) + 1 : 0;
    BigInt result( 0, size + ndigs );
    result.sign = sign * nsign;
    if( !result.sign ) return result;

    if( n >= 1 ) for( int i = 0; i < ndigs; i++ ) n /= 10;
    result.size = 0;

    char afterDot[DIGS_AFTER_DOT + 1];
    memset( afterDot, 0, sizeof( afterDot ) );

    // Keep going until the DIGS_AFTER_DOT'th digit after the decimal point
    for( int i = ndigs - 1; i >= -DIGS_AFTER_DOT; i-- )
    {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美自拍偷拍一区| 国产三区在线成人av| 精品剧情在线观看| 最新日韩av在线| 青青草97国产精品免费观看 | 91在线视频在线| 欧美日本在线一区| 中文字幕av免费专区久久| 亚洲高清在线精品| 成人国产精品免费观看| 欧美一区二区三级| 亚洲视频每日更新| 国产美女在线观看一区| 91成人在线免费观看| 国产无一区二区| 蜜桃av一区二区三区| 在线观看日韩毛片| 国产精品国产三级国产有无不卡 | 精彩视频一区二区三区| 欧美视频精品在线| 亚洲视频精选在线| 成人激情开心网| 久久久久久毛片| 久久成人久久鬼色| 欧美日韩国产高清一区二区三区| 国产人伦精品一区二区| 麻豆国产精品官网| 在线成人av网站| 亚洲午夜av在线| 一本久道中文字幕精品亚洲嫩| 久久视频一区二区| 激情丁香综合五月| 日韩美女一区二区三区四区| 亚洲chinese男男1069| 91视频一区二区三区| 国产精品国产三级国产普通话蜜臀| 久久激五月天综合精品| 欧美一二区视频| 日本伊人精品一区二区三区观看方式| 在线看不卡av| 亚洲精品一二三区| 色www精品视频在线观看| 国产精品国产三级国产a| 成人av高清在线| ㊣最新国产の精品bt伙计久久| 成人av在线播放网址| 中国av一区二区三区| 成人黄色国产精品网站大全在线免费观看| 国产日产欧美一区二区三区| 高清在线成人网| 中文字幕日韩精品一区| 91尤物视频在线观看| 亚洲精品视频一区| 欧美三级中文字幕在线观看| 午夜精品视频在线观看| 欧美一区二区三区婷婷月色| 久久99精品久久久久| 久久久久国产一区二区三区四区| 国产精品一区二区三区99| 久久精品日产第一区二区三区高清版| 欧美色窝79yyyycom| 亚欧色一区w666天堂| 日韩欧美一级二级三级| 成人午夜精品一区二区三区| 中文字幕综合网| 欧美日韩国产另类一区| 国产在线一区观看| 亚洲免费观看高清| 91精品国产综合久久蜜臀| 国产一区二区三区最好精华液| 久久精品一区蜜桃臀影院| 91片在线免费观看| 美国一区二区三区在线播放| 中文av一区特黄| 欧美日本一道本| 成人性生交大片免费看视频在线 | 91精品一区二区三区久久久久久| 日韩极品在线观看| www国产亚洲精品久久麻豆| 9人人澡人人爽人人精品| 午夜精品久久久久久久99樱桃| 久久综合狠狠综合| 欧美手机在线视频| 国产一区美女在线| 爽好久久久欧美精品| 国产精品毛片无遮挡高清| 8x8x8国产精品| 波多野洁衣一区| 久久99精品一区二区三区三区| 亚洲欧洲国产日韩| 精品久久99ma| 欧美日韩国产123区| 成人国产精品免费观看动漫| 男女视频一区二区| 亚洲自拍与偷拍| 中文字幕精品—区二区四季| 91精品久久久久久蜜臀| 99久久婷婷国产精品综合| 狠狠色狠狠色综合| 天天综合色天天综合色h| 亚洲日韩欧美一区二区在线| 久久这里只精品最新地址| 欧美日韩成人综合在线一区二区| 成人深夜视频在线观看| 久久99国产精品久久99果冻传媒| 一区二区三区中文字幕电影| 国产蜜臀97一区二区三区| 日韩三级视频中文字幕| 欧美日本乱大交xxxxx| 色狠狠一区二区三区香蕉| 国产精品一区免费在线观看| 免费一区二区视频| 亚洲成人精品一区二区| 一区二区三区中文字幕在线观看| 国产欧美精品日韩区二区麻豆天美| 欧美成人三级电影在线| 欧美一级黄色片| 欧美一区二区三区精品| 欧美高清激情brazzers| 欧美亚洲国产一区在线观看网站| 91猫先生在线| 色一区在线观看| 色婷婷亚洲一区二区三区| av亚洲精华国产精华精| av一二三不卡影片| 色悠悠亚洲一区二区| 在线观看成人免费视频| 欧美亚洲高清一区| 欧美日韩一级视频| 在线不卡免费av| 91精品欧美一区二区三区综合在| 欧美理论电影在线| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲综合一区二区三区| 亚洲欧美日本在线| 亚洲一二三四在线观看| 亚洲成av人片在线观看| 亚洲福利视频一区| 美国三级日本三级久久99 | 免费观看一级特黄欧美大片| 免费观看在线综合色| 国产又黄又大久久| 99r精品视频| 欧美三区在线视频| 欧美v亚洲v综合ⅴ国产v| 国产亚洲成av人在线观看导航| 日本一区二区成人| 亚洲制服丝袜av| 热久久免费视频| 国产激情一区二区三区桃花岛亚洲| 成人免费观看av| 欧美色偷偷大香| 久久久电影一区二区三区| 亚洲女人****多毛耸耸8| 日韩影视精彩在线| 国产福利精品导航| 欧美亚洲综合久久| 久久亚洲一区二区三区明星换脸| 亚洲欧美在线aaa| 日韩制服丝袜av| 成人激情黄色小说| 5566中文字幕一区二区电影| 欧美精品一区男女天堂| 综合色天天鬼久久鬼色| 日本在线不卡视频一二三区| 国产 欧美在线| 欧美理论片在线| 成人欧美一区二区三区视频网页| 丝袜美腿亚洲综合| 岛国一区二区在线观看| 51精品秘密在线观看| 国产精品网曝门| 蜜臀av一区二区三区| 色网综合在线观看| 久久午夜老司机| 日本 国产 欧美色综合| 在线免费一区三区| 国产亚洲精品精华液| 美国毛片一区二区三区| 日本久久一区二区| 欧美国产日本韩| 久久99精品一区二区三区三区| 欧美怡红院视频| 国产精品成人免费在线| 国内久久婷婷综合| 欧美精三区欧美精三区| 亚洲色欲色欲www| 国产福利一区二区三区在线视频| 欧美猛男男办公室激情| 1024成人网| 国产丶欧美丶日本不卡视频| 911精品产国品一二三产区| 一区二区三区精品在线| 不卡一区二区三区四区| 国产日韩欧美不卡在线| 国产综合成人久久大片91| 日韩午夜在线影院| 日韩专区欧美专区| 欧美一区二区视频观看视频| 亚洲成年人网站在线观看|