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

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

?? yc.cpp

?? 計算大整數的四則運算(+
?? CPP
字號:
#include<iostream>
#include<string>

using namespace std;

const unsigned int MAX = 10000; //整型數組的最大長度 
const long long WIDTHMAX = 1000000000; //整型數組val[MAX]的元素上限 
const unsigned int WIDTH = 9;  //輸出整型數組val[MAX]的元素時的格式寬度,即整型數組val[MAX]的元素的最多位數 

typedef struct node
{
    long long val[MAX]; //用來存儲高精度整數 
    unsigned int size; //整型數組的實際長度 
} BigInt;

BigInt StrToBigInt(string s);
void PrintBigInt(const BigInt & a);
int ComPareBigInt(const BigInt & a, const BigInt & b);
BigInt MulBigInt(const BigInt & a, const BigInt & b);
BigInt AddBigInt(const BigInt & a, const BigInt & b);
BigInt SubBigInt(BigInt a, BigInt b);
BigInt DivBigInt(const BigInt & a, const BigInt & b);
BigInt FacBigInt(unsigned int n);
void PowBigInt(BigInt & c, const BigInt & a, unsigned int n);
void PowBigInt_2(BigInt & c, const BigInt & a, unsigned int n);
BigInt HalfBigInt(BigInt a);

int main()
{
    string s;
    BigInt a, b, c;
    
    cin >> s;
    a = StrToBigInt(s);
    cin >> s;
    b = StrToBigInt(s);
    
    cout << "  ";
    PrintBigInt(a);
    cout << "+ ";
    PrintBigInt(b);
    c = AddBigInt(a, b);
    cout << "= ";
    PrintBigInt(c);
    cout << endl;
    
    cout << "  "; 
    PrintBigInt(a);
    cout << "- ";
    PrintBigInt(b);
    c = SubBigInt(a, b);
    cout << "= ";
    PrintBigInt(c);
    cout << endl;
    
    cout << "  ";
    PrintBigInt(a);
    cout << "* ";
    PrintBigInt(b);
    c = MulBigInt(a, b);
    cout << "= ";
    PrintBigInt(c);
    cout << endl;
    
    cout << "  ";
    PrintBigInt(a);
    cout << "/ 2 " << endl;
    c = HalfBigInt(a);
    cout << "= ";
    PrintBigInt(c);
    cout << endl;
    
    cout << "  ";
    PrintBigInt(a);
    cout << "/ ";
    PrintBigInt(b);
    c = DivBigInt(a, b);
    cout << "= ";
    PrintBigInt(c);
    cout << endl;
    
    unsigned int n;
    cin >> n;
    //cout << n << "! = ";
//    c = FacBigInt(n);
//    PrintBigInt(c);
//    cout << c.size << endl;
     cout << endl;

    cout << "  ";
    PrintBigInt(a);
    cout << "^" << n << " = ";
    PowBigInt(c, a, n);
    PrintBigInt(c);
    cout << endl;
    
    cout << "  ";
    PrintBigInt(a);
    cout << "^" << n << " = ";
    PowBigInt_2(c, a, n);
    PrintBigInt(c);
    cout << endl;
    
    system("pause");
    return 0;
}
/*
函數名稱:PrintBigInt
函數功能:輸出用整型數組表示的高精度整數
輸入參數:const BigInt & a:用整型數組表示的高精度整數
輸出參數:無
*/
void PrintBigInt(const BigInt & a)
{
    cout << a.val[a.size-1];
    for (int i=a.size-2; i>=0; i--)
    {
        unsigned w = WIDTHMAX / 10;
        while (w > 0)
        {
            if (a.val[i] >= w)
                break;
            cout << 0;
            w /= 10;
        }
        cout << a.val[i];
    }
    cout << endl; 
}
/*
函數名稱:StrToBigInt
函數功能:把元素為數字的字符串轉換為用整型數組表示的高精度整數
輸入參數:string s:存儲數字的字符串 
輸出參數:BigInt:返回用整型數組表示的高精度整數
*/
BigInt StrToBigInt(string s)
{
    BigInt a;
    a.size = 0;
    int i = s.size();
    unsigned long long sum = 0;
    while ( i>=WIDTH)
    {
        for (int j=i-WIDTH; j<i; j++)
            sum = sum * 10 + (s[j] - '0');
        a.val[a.size++] = sum;
        sum = 0;
        i -= WIDTH;
    } 
    if (i > 0)
    {
        for (int j=0; j<i; j++)
            sum = sum * 10 + (s[j] - '0');
        a.val[a.size++] = sum;
    } 
    return a;
}
/*
函數名稱:AddBigInt
函數功能:高精度整數加法
輸入參數:const BigInt & a:用整型數組表示的高精度整數加數 
          const BigInt & b:用整型數組表示的高精度整數加數 
輸出參數:BigInt:返回用整型數組表示的高精度整數和 
*/
BigInt AddBigInt(const BigInt & a, const BigInt & b)
{
    //逆序計算a+b,則從低位開始計算 
    BigInt c;
    unsigned long long carry = 0;
    unsigned int i = 0;
    c.size = 0;
    while (i < a.size && i < b.size)
    {
        c.val[c.size++] = (a.val[i] + b.val[i] + carry) % WIDTHMAX; 
        carry = (a.val[i] + b.val[i] + carry) / WIDTHMAX; 
        i++;
    }
    while (i < a.size)
    {
        c.val[c.size++] =  (a.val[i] + carry) % WIDTHMAX; 
        carry = (a.val[i] + carry) / WIDTHMAX; 
        i++;
    }
    while (i < b.size)
    {
        c.val[c.size++] =  (b.val[i] + carry) % WIDTHMAX; 
        carry = (b.val[i] + carry) / WIDTHMAX; 
        i++;
    }
    if (carry > 0)
        c.val[c.size++] = carry; 
    return c;
}
/*
函數名稱:SubBigInt
函數功能:高精度整數減法
輸入參數:BigInt a:用整型數組表示的高精度整數被減數 
          BigInt b:用整型數組表示的高精度整數減數 
輸出參數:BigInt:返回用整型數組表示的高精度整數差 
*/
BigInt SubBigInt(BigInt a, BigInt b)
{
    BigInt c;
    c.size = 0;
    if (ComPareBigInt(a, b) == 0)
    {
        c.size = 1;
        c.val[0] = 0;
        return c; 
    }
    bool flag = false;
    if (ComPareBigInt(a, b) < 0)//交換,并得到一個負號 
    {
        flag = true;
        BigInt temp = a;
        a = b;
        b = temp;
    }
    unsigned int i = 0;
    while (i < b.size)
    {
        if (a.val[i] >= b.val[i])
             c.val[c.size++] = a.val[i] - b.val[i];
        else
        {
            a.val[i+1] -= 1;
            c.val[c.size++] = a.val[i] + WIDTHMAX - b.val[i];
        }   
        i++;
    }
    while (i < a.size)
    {
        if (a.val[i] < 0)
        {
            a.val[i+1] -= 1;
            a.val[i] += WIDTHMAX;
        }
        c.val[c.size++] = a.val[i];
        i++;
    }
    //消除多余的高位0
    while (c.val[c.size-1] == 0) 
        c.size--;
           
    if (flag)//如果是負數,加上負號 
        c.val[c.size-1] = -c.val[c.size-1];
    return c;
}
/*
函數名稱:ComPareBigInt
函數功能:比較兩個高精度整數的大小 
輸入參數:BigInt a:用整型數組表示的高精度整數被減數 
          BigInt b:用整型數組表示的高精度整數減數 
輸出參數:int:a > b返回1,a = b返回0,a < b返回-1
*/
int ComPareBigInt(const BigInt & a, const BigInt & b)
{
    if (a.size > b.size)
        return 1;
    if (a.size < b.size)
        return -1;
        
    for (int i=a.size-1; i>=0; i--) 
    {
        if (a.val[i] > b.val[i])
            return 1;
        if (a.val[i] < b.val[i])
            return -1;
    }
    return 0;
}
/*
函數名稱:MulBigInt
函數功能:高精度整數乘法
輸入參數:const BigInt & a:用整型數組表示的高精度整數被乘數 
          const BigInt & b:用整型數組表示的高精度整數乘數 
輸出參數:BigInt:返回用整型數組表示的高精度整數乘積 
*/
BigInt MulBigInt(const BigInt & a, const BigInt & b)
{
    if (a.size == 1 && a.val[0] == 0)
        return a;
    if (b.size == 1 && b.val[0] == 0)
        return b;
 
    BigInt c;
    for (int i=0; i<MAX; i++) //全部賦初值為0 
        c.val[i] = 0;
    for (int i=0, j=0; i<b.size; i++)
    {
        for (j=0; j<a.size; j++)
        {
            c.val[i+j] += a.val[j] * b.val[i]; 
            c.val[i+j+1] += c.val[i+j] / WIDTHMAX; 
            c.val[i+j] %= WIDTHMAX; 
        }
        c.size = i + j;
        if (c.val[c.size] != 0)//最高位有進位 
            c.size++;
    }
    return c;
}
/*
老版本: 
BigInt MulBigInt2(const BigInt & a, const BigInt & b)
{
    if (a.size == 1 && a.val[0] == 0)
        return a;
    if (b.size == 1 && b.val[0] == 0)
        return b;
 
    BigInt c, tc;
    unsigned long long carry = 0;
    c.size = 0;
    for (int i=0, j=0; i<b.size; i++)
    {
        for (j=0; j<i; j++)//先在臨時和tc的低位補足0 
            tc.val[j] = 0;
        carry = 0;
        for (j=0; j<a.size; j++)
        {
            tc.val[i+j] = (a.val[j] * b.val[i] + carry) % WIDTHMAX; 
            carry = (a.val[j] * b.val[i] + carry) / WIDTHMAX; 
        }
        tc.size = i + j;
        if (carry > 0)
            tc.val[tc.size++] = carry; 
        //累加到c中 
        c = AddBigInt(tc, c);
    }
    return c;
}
*/

/*
函數名稱:FacBigInt
函數功能:高精度整數階乘
輸入參數:unsigned int n:正整數 
輸出參數:BigInt:返回用整型數組表示的高精度整數階乘 
*/
BigInt FacBigInt(unsigned int n)
{
    BigInt s, c;
    c.size = s.size = 1;
    s.val[0] = 1;
    for (unsigned long long i=2; i<=n; i++)
    {
        c.val[0] = i;
        s = MulBigInt(s, c);
    }
    return s;
}

/*
函數名稱:PowBigInt
函數功能:遞歸高效算法求高精度整數冪
輸入參數:BigInt & c:存儲高精度整數冪的整型數組 
          const BigInt & a:用整型數組表示的高精度整數底數 
          long long n:  指數
*/
void PowBigInt(BigInt & c, const BigInt & a, unsigned int n)
{
    if (n == 1)
    {
        c = a;
        return ;
    }
    if (n == 0 || (a.size == 1 && a.val[0] == 1))
    {
        c.size = c.val[0] = 1;
        return ;  
    }
    
    PowBigInt(c, a, n/2); //遞歸求高精度整數冪 
    
    c = MulBigInt(c, c); //a^n = a^(n/2)*a^(n/2)*f(a)
    if (n % 2 == 1)      //其中f(a) = 1(n%2==0)或f(a) = a(n%2==1)
        c = MulBigInt(a, c);
}

/*
函數名稱:PowBigInt_2
函數功能:非遞歸高效算法求高精度整數冪
輸入參數:BigInt & c:存儲高精度整數冪的整型數組 
          const BigInt & a:用整型數組表示的高精度整數底數 
          long long n:  指數
*/
void PowBigInt_2(BigInt & c, const BigInt & a, unsigned int n)
{
    int stack[MAX] = {0};
    int top = 0;
    while (n > 0) //利用一個棧來存儲n的狀態:奇數還是偶數 
    {
        stack[top++] = n % 2;
        n /= 2;
    }
    c.size = c.val[0] = 1;
    for (int i=top-1; i>=0; i--)
    {
        c = MulBigInt(c, c);  //a^n = a^(n/2)*a^(n/2)*f(a)
        if (stack[i] == 1)   //其中f(a) = 1(n%2==0)或f(a) = a(n%2==1)
            c = MulBigInt(a, c);
    }
}

/*
函數名稱:DivBigInt
函數功能:二分法實現高精度整數除法
輸入參數:const BigInt & a:用整型數組表示的高精度整數被除數 
          const BigInt & b:用整型數組表示的高精度整數除數 
輸出參數:BigInt:返回用整型數組表示的高精度整數商 
*/
BigInt DivBigInt(const BigInt & a, const BigInt & b)
{
    BigInt high, low, mid, one, c;
    if ((a.size == 1 && a.val[0] == 0) || (b.size == 1 && b.val[0] == 0))
    {
        c.size = 1;
        c.val[0] = 0;
        return c;
    }
    
    one.size = 1; //值為1的高精度整數 
    one.val[0] = 1;
    high = a;  //上界 
    low.size = 1; //下界 
    low.val[0] = 0;
    while (ComPareBigInt(low, high) < 0)
    {
        mid = HalfBigInt(AddBigInt(high, low)); //中間數 
        c = MulBigInt(mid, b);
        if (ComPareBigInt(c, a) == 0)
            return mid;
        else if (ComPareBigInt(c, a) < 0)
            low = AddBigInt(mid, one);
        else 
            high = SubBigInt(mid, one);
    }      
    c = MulBigInt(low, b);
    if (ComPareBigInt(c, a) <= 0)
        return low;
    else 
        return SubBigInt(low, one);
}

/*
函數名稱:HalfBigInt
函數功能:高精度整數求半 
輸入參數:BigInt a:用整型數組表示的高精度整數
輸出參數:BigInt:返回用整型數組表示的高精度整數的一半 
*/
BigInt HalfBigInt(BigInt a)
{
    BigInt c;
    c.size = a.size;
    for (int i=a.size-1; i>0; i--)
    {
        c.val[i] = a.val[i] / 2;   
        if (a.val[i] % 2 == 1)
            a.val[i-1] += WIDTHMAX;
    }
    c.val[0] = a.val[0] / 2;   
    if (c.size > 0 && c.val[c.size-1] == 0)
        c.size--;
        
    return c;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美激情一区二区三区蜜桃视频 | 日本高清不卡aⅴ免费网站| 欧美视频在线观看一区二区| 亚洲精品一区二区三区影院 | 国产精品久久久久久久久搜平片 | 亚洲精品免费在线播放| 激情五月婷婷综合网| 欧美美女bb生活片| 亚洲美女电影在线| 99综合影院在线| 国产亚洲综合性久久久影院| 免费观看成人av| 在线播放欧美女士性生活| 亚洲色图欧洲色图婷婷| 国产99久久久国产精品潘金 | 精品视频免费看| 亚洲日本乱码在线观看| 不卡一区中文字幕| 国产精品色呦呦| 成人精品电影在线观看| 亚洲国产成人在线| 国产伦理精品不卡| 久久久av毛片精品| 国产精品香蕉一区二区三区| 久久久亚洲精华液精华液精华液| 久久精品99久久久| 欧美成人精品1314www| 秋霞电影一区二区| 精品欧美一区二区久久| 日本视频在线一区| 欧美xxxx老人做受| 国产乱子轮精品视频| 2017欧美狠狠色| 国产伦精品一区二区三区在线观看| 日韩一区二区三区四区 | 国产亚洲一本大道中文在线| 国产一区亚洲一区| 中国色在线观看另类| www.亚洲精品| 亚洲国产日产av| 欧美一区二视频| 激情av综合网| 久久亚洲私人国产精品va媚药| 国产一区二区日韩精品| 中文字幕中文在线不卡住| 91婷婷韩国欧美一区二区| 亚洲影院免费观看| 欧美一卡二卡在线观看| 国产风韵犹存在线视精品| 亚洲色图欧美偷拍| 69堂成人精品免费视频| 国产麻豆午夜三级精品| **欧美大码日韩| 在线观看日韩毛片| 青青草精品视频| 国产欧美在线观看一区| 色哟哟在线观看一区二区三区| 亚洲国产综合在线| 久久先锋资源网| 91免费在线播放| 麻豆一区二区99久久久久| 国产欧美精品在线观看| 欧美色倩网站大全免费| 国产美女精品在线| 亚洲国产一区二区视频| 久久夜色精品一区| 91久久国产最好的精华液| 九色porny丨国产精品| 亚洲视频一区二区在线观看| 91精品国产色综合久久不卡蜜臀 | 亚洲欧美精品午睡沙发| 欧美一区二区三区公司| www.亚洲人| 久久国产婷婷国产香蕉| 亚洲久本草在线中文字幕| 精品日韩欧美在线| 欧美在线视频你懂得| 成人一区二区三区视频在线观看 | 欧美一级二级三级乱码| 97久久超碰国产精品| 久久av老司机精品网站导航| 亚洲欧美韩国综合色| 久久久青草青青国产亚洲免观| 欧美视频一区二区三区在线观看 | 国产精品久久久久四虎| 欧美成人高清电影在线| 欧美日韩一区二区三区四区| 丰满少妇在线播放bd日韩电影| 另类小说欧美激情| 三级成人在线视频| 一区二区三区在线影院| 国产精品私人影院| 国产欧美久久久精品影院| 欧美sm极限捆绑bd| 日韩欧美在线1卡| 欧美群妇大交群的观看方式| 在线免费观看不卡av| 91丨porny丨户外露出| 成人一区二区三区在线观看| 国产酒店精品激情| 国产一区欧美一区| 国精产品一区一区三区mba桃花| 亚洲va欧美va人人爽| 亚洲成人在线免费| 亚洲成av人影院在线观看网| 亚洲午夜久久久久久久久久久| 亚洲天堂网中文字| 亚洲人成在线播放网站岛国| 日韩美女久久久| 亚洲精品你懂的| 亚洲自拍欧美精品| 亚洲高清不卡在线| 天堂久久久久va久久久久| 亚洲国产日韩一级| 日韩av在线免费观看不卡| 日本系列欧美系列| 麻豆久久一区二区| 国产资源在线一区| 国产成+人+日韩+欧美+亚洲| 成人不卡免费av| 97久久超碰国产精品电影| 91国模大尺度私拍在线视频| 日本高清不卡视频| 91精品在线麻豆| 欧美一级生活片| 久久亚区不卡日本| 亚洲欧美在线观看| 亚洲在线视频免费观看| 日韩中文字幕不卡| 国产精品原创巨作av| 波多野结衣91| 欧美吞精做爰啪啪高潮| 日韩欧美激情在线| 国产性做久久久久久| 亚洲色图一区二区三区| 亚洲va韩国va欧美va精品| 九色综合狠狠综合久久| gogo大胆日本视频一区| 欧美亚洲国产bt| 久久综合中文字幕| 亚洲视频每日更新| 美女一区二区三区在线观看| 成人永久免费视频| 欧美日韩一区视频| 久久精品综合网| 亚洲18色成人| 国产在线乱码一区二区三区| 不卡视频免费播放| 91精品在线观看入口| 中文成人av在线| 美女国产一区二区三区| 99久久综合精品| 日韩欧美亚洲国产另类| 国产精品福利一区二区三区| 日韩精品1区2区3区| 国产成人综合亚洲网站| 欧美猛男gaygay网站| 国产亚洲一区二区三区四区 | 欧美一级欧美三级在线观看 | 99热99精品| 日韩美一区二区三区| 亚洲精选免费视频| 国产最新精品精品你懂的| 欧美性生活一区| 国产精品久久久久久久岛一牛影视 | 精品欧美一区二区久久| 一区二区三区四区亚洲| 国产伦精品一区二区三区免费 | 亚洲人妖av一区二区| 久久精品国产一区二区三区免费看| 99久久婷婷国产综合精品| 日韩精品一区二区三区swag | 日韩精品最新网址| 一区二区三区 在线观看视频| 国产黄色精品网站| 91精品国产91久久久久久最新毛片 | 国产精品亚洲а∨天堂免在线| 欧美日韩精品一区二区三区四区| 国产精品久久久爽爽爽麻豆色哟哟| 免费亚洲电影在线| 欧美亚洲综合久久| 亚洲乱码中文字幕综合| 成人性生交大片免费看在线播放| 精品国产乱码久久久久久久久 | 91精品国产乱码久久蜜臀| 一区二区不卡在线播放| 92国产精品观看| 国产精品天美传媒沈樵| 国产传媒久久文化传媒| 久久精品人人做人人爽97| 韩国v欧美v日本v亚洲v| 欧美成人a在线| 国模套图日韩精品一区二区 | 国产剧情一区二区| 精品精品国产高清一毛片一天堂| 日本不卡123| 日韩欧美精品三级| 九色porny丨国产精品| 亚洲精品一区二区精华| 精品亚洲porn|