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

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

?? project1.cpp

?? 大數加減乘除的實現
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//設計一個支持大數運算的計算器,其中乘法使用分治法求解。該計算器支持加減乘除還有開方根運算。

#include <iostream>
#include <list>
#include <string>
#include <cstdio>
#include <cctype>
#include <cmath>
using namespace std;

list<char> Add(list<char> s, list<char> t);
list<char> Sub(list<char> s, list<char> t);
list<char> Mul(list<char> s, list<char> t);
void Div(list<char> s, list<char> t);
void  Root(list<char>);
void print(list<char> ans);

void printhelp()             //打印幫助信息
{
    cout << "請選擇要進行的大數運算" << endl;
    cout << "1:加法運算" << endl;
    cout << "2:減法運算" << endl;
    cout << "3:乘法運算" << endl;
    cout << "4:除法運算" << endl;
    cout << "5:開平方根運算" << endl;
    cout << "6:退出" << endl;
}
list<char> Add(list<char> num1,list<char> num2)  //加法運算
{
    list<char> ans;
    list<char>::iterator iter1,iter2;
    iter1 = num1.begin();
    iter2 = num2.begin();
    int sign = 0;                                   //標記結果符號
    if((*iter1) == '-' && (*iter2) == '-')        //如果兩個數都是負數
    {
        num1.pop_front();
        num2.pop_front();
        sign = 1;
        ans = Add(num1,num2);
        ans.push_front('-');
    }
    else if((*iter1) == '-' && (*iter2) != '-')      //如果一負一正
    {
        num1.pop_front();
        ans = Sub(num2,num1);
        
    }
    else if((*iter1) != '-' && (*iter2) == '-')      //如果一正一負
    {
        num2.pop_front();
        ans = Sub(num1,num2);
    }
    else                                          //如果都為正
    {
        int len1,len2,i,len,carry;
        len1 = num1.size();
        len2 = num2.size();
        if(len1 >= len2)                     //補齊兩個數的位數
        {
            len = len1;
            for(i = 0; i < len1 - len2; i++)
                num2.push_front('0');
        }
        else
        {
            len = len2;
            for(i = 0; i < len2 - len1; i++)
                num1.push_front('0');
        }
        //print(num1);
        //print(num2);
        carry = 0;
        iter1 = num1.end();
        iter2 = num2.end();
        iter1--;
        iter2--;
        for(;(iter1 != num1.begin()) && (iter2 != num2.begin()); --iter1,--iter2)  //進行運算
        {
            i = (*iter1 - '0') + (*iter2 - '0') + carry;
            //cout << (*iter1 - '0') << " " << (*iter2 - '0') << " " << i << endl;
            ans.push_front((i % 10) + '0');
            carry = i / 10;
        }
        i = (*iter1 - '0') + (*iter2 - '0') + carry;
        //cout << (*iter1 - '0') << " " << (*iter2 - '0') << " " << i << endl;
        ans.push_front((i % 10) + '0');
        carry = i / 10;
        if(carry)
            ans.push_front(carry+'0');
    }
    return ans;                                                     //返回結果

}
list<char> Sub(list<char> num1,list<char> num2)                    //減法運算
{
    list<char> ans;
    int sign = 0;
    list<char>::iterator iter1,iter2;
    int len1,len2,len;
    iter1 = num1.begin();
    iter2 = num2.begin();
    if((*iter1) == '-' && (*iter2) == '-')                  //如果兩個數都為負數
    {
        num2.pop_front();
        num1.pop_front();
        ans = Sub(num2,num1);
        //ans.push_front('-');
    }
    else if( (*iter1) == '-' && (*iter2) != '-')              //如果一負一正
    {
        num1.pop_front();
        ans = Add(num1,num2);
        ans.push_front('-');
    }
    else if( (*iter1) != '-' && (*iter2) == '-')              //如果一正一負
    {
        num2.pop_front();
        ans = Add(num1,num2);
        
    }
    else                                                   //如果都為正
    {
        len1 = num1.size();
        len2 = num2.size();
        if(len1 >= len2)                                 //補齊位數
        {
            len = len1;
            for(int i = 0; i < len1 - len2; i++)
                num2.push_front('0');
        }
        else
        {
            len = len2;
            for(int i = 0; i < len2 - len1; i++)
                num1.push_front('0');
        }
        //print(num1);cout << endl;
        //print(num2);cout << endl;
        int carry = 0,i;
        iter1 = num1.end();
        iter2 = num2.end();
        iter1--;
        iter2--;
        for(;(iter1 != num1.begin()) && (iter2 != num2.begin()); --iter1,--iter2)    //進行運算
        {
            i = (*iter1 - '0' - carry) - (*iter2 - '0');
            carry = 0;
            if( i < 0)
            {
                i += 10;
                carry = 1;
            }
            //cout << (*iter1 - '0') << " " << (*iter2 - '0') << " " << i << endl;
            ans.push_front((i % 10) + '0');
        }
        i = (*iter1 - '0' - carry) - (*iter2 - '0');
        if(i < 0)
        {
            i += 10;
            sign = 1;
        }
        //cout << (*iter1 - '0') << " " << (*iter2 - '0') << " " << i << endl;
        if(i) ans.push_front(i + '0');
        if(sign)
            ans.push_front('-');
    }
    return ans;

}
list<char> Mul(list<char> num1,list<char> num2)  // 分治法求兩大數的積
{
    list<char> ans;
    int sign = 0;
    int len1,len2,len;
    list<char>::iterator iter1,iter2,iter;
    list<char> high,low;
    list<char> anshigh,anslow;
    int th,tl;
    int i,j,k;
    //print(num1);cout << endl;
    //print(num2);cout << endl;
    if(num1.size() == 1 && num2.size() == 1)     //如果兩數都已是一位數,則進行運算
    {
        th = *(num1.begin()) - '0';
        tl = *(num2.begin()) - '0';
        th *= tl;
        ans.push_front( th % 10 + '0');
        ans.push_front( th / 10 + '0');
        return ans;
    }
    else if(num1.size() == 1 && num2.size() > 1)            //如果num1位數大于1,則對Num1分治求積
    {
         if(*(num2.begin()) == '-')
           {
                sign = 1;
                num2.pop_front();
           }
         len2 = num2.size();
         if(len2 == 1)
         {
            ans = Mul(num1,num2);
            if(sign)
                ans.push_front('-');
         }
         else
         {
            for(iter= num2.begin(),i = 0; i < len2 / 2; i++,iter++)
            {
                high.push_back(*iter);
            }
            for(;iter!=num2.end();iter++)
            {
                low.push_back(*iter);
            }
            len = low.size();
            anshigh = Mul(num1,high);                 //num1分為兩部分,high,low
            anslow = Mul(num1,low);
            for(i = 0; i < len; i++)
                anshigh.push_back('0');
            ans = Add(anshigh,anslow);                 //合并結果
            if(sign)
                ans.push_front('-');
         }
         return ans;
    }
    else if(num2.size() == 1 && num1.size() > 1)              //如果num2位數大于1,則對Num2分治求積
    {
         if(*(num1.begin()) == '-')
           {
                sign = 1;
                num1.pop_front();
           }
         len1 = num1.size();
         if(len2 == 1)
         {
            ans = Mul(num1,num2);
            if(sign)
                ans.push_front('-');
         }
         else
         {
            for(iter= num1.begin(),i = 0; i < len1 / 2; i++,iter++)
            {
                high.push_back(*iter);
            }
            for(;iter!=num1.end();iter++)
            {
                low.push_back(*iter);
            }
            len = low.size();
            anshigh = Mul(num2,high);                   //num2分為兩部分,high,low
            anslow = Mul(num2,low);
            for(i = 0; i < len; i++)
                anshigh.push_back('0');
            ans = Add(anshigh,anslow);                    //合并結果
            if(sign)
                ans.push_front('-');
         }
         return ans;
    }                                                       //如果兩數位數都大于1,則都運用分治
    else
    {
        list<char> num1high,num1low,num2high,num2low;
        int flag1 = 0,flag2 = 0;
        if(*(num1.begin()) == '-')
        {
            flag1 = 1;
            num1.pop_front();
        }
        if(*(num2.begin()) == '-')
        {
            flag2 = 1;
            num2.pop_front();
        }
        if((flag1 == 1 && flag2 == 0)||(flag1 == 0 && flag2 == 1))  //如果有一正一負,則標記結果為負
        {
            sign = 1;
        }
        len1 = num1.size();
        len2 = num2.size();
        if(len1 == 1 || len2 == 1)                 //如果有一個數是一位數,則直接遞歸調用
        {
            ans = Mul(num1,num2);
            if(sign)
                ans.push_front('-');
        }
        else
        {                                                //否則分治法求
            for(iter = num1.begin(),i = 0; i < len1 / 2; iter++,i++)
                num1high.push_back(*iter);            //被乘數高位部分
            for( ; iter != num1.end(); iter++)
                num1low.push_back(*iter);                 //被乘數低位部分
            for(iter = num2.begin(),i = 0; i < len2 / 2; iter++,i++)
                num2high.push_back(*iter);                  //乘數高位部分
            for( ; iter != num2.end(); iter++)
                num2low.push_back(*iter);                    //乘數低位部分
            int a = (len1 + 1) / 2;
            int b = (len2 + 1) / 2;
            list<char> AC,AD,BC,BD;
            //print(num2high);cout << endl;
            //print(num2low);cout << endl;
            AC = Mul(num1high,num2high);                  //運用X=A*10^a + B; Y= C*10^b + D;
            AD = Mul(num1high,num2low);                   // X*Y = AC * 10 ^(a+b) + AD *10^a + BC * 10 ^b + BD公式求
            BC = Mul(num1low,num2high);
            BD = Mul(num1low,num2low);
            for(i = 0; i < a + b; i++)
                AC.push_back('0');
            for(i = 0; i < a; i++)
                AD.push_back('0');
            for(i = 0; i < b; i++)
                BC.push_back('0');
            ans = Add(AC,AD);
            ans = Add(ans,BC);
            ans = Add(ans,BD);                            //累加結果
            if(sign)
                ans.push_front('-');
        }
        return ans;

    }

}
void Div(list<char> num1,list<char> num2)                 //用輾轉相除求結果
{
    list<char> ans;
    list<char> temp;
    int len1,len2,len;
    int i,j,k;
    int sign = 0;
    int flag1 = 0,flag2 = 0;
    list<char>::iterator iter;
    if(*(num1.begin()) == '-')
    {
        flag1 = 1;
        num1.pop_front();
    }
    if(*(num2.begin()) == '-')
    {
        flag2 = 1;
        num2.pop_front();
    }
    if((flag1 == 1 && flag2 != 1) || (flag1 == 0 && flag2 == 1))
        sign = 1;                                          //標記結果符號
    len1 = num1.size();
    len2 = num2.size();
    if(len1 < len2)                                 //如果被除數小于除法,除數為0
    {
        cout << "商是0;余數是" ;
        print(num2);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
波多野结衣中文字幕一区| 久久青草欧美一区二区三区| 中文字幕永久在线不卡| 成人免费观看视频| 亚洲日本va午夜在线影院| 日本久久一区二区三区| 亚洲六月丁香色婷婷综合久久 | 97久久久精品综合88久久| 自拍偷拍亚洲激情| 一本到不卡免费一区二区| 亚洲成人自拍偷拍| 欧美一区二区三区在线视频| 黄网站免费久久| 精品国精品国产| 91影院在线免费观看| 午夜电影网亚洲视频| 精品国产乱码久久久久久老虎| 国产剧情一区在线| 曰韩精品一区二区| 精品少妇一区二区三区在线视频| 国产成人综合自拍| 亚洲综合成人在线视频| 日韩欧美中文一区| 99久久精品情趣| 蜜桃视频一区二区三区 | 在线电影一区二区三区| 国产在线一区二区综合免费视频| 国产欧美日韩在线视频| 欧美在线观看禁18| 国产精品亚洲一区二区三区妖精| 亚洲精品免费电影| 久久―日本道色综合久久| 一本大道久久a久久精二百| 亚洲成人动漫精品| 国产女人aaa级久久久级 | 国产精品水嫩水嫩| 欧美日韩成人一区| 成人av在线资源| 久久电影网站中文字幕| 亚洲欧美另类图片小说| 久久综合久久久久88| 欧美亚洲动漫制服丝袜| 成人黄色777网| 久久不见久久见中文字幕免费| 亚洲美女精品一区| 亚洲国产精品成人综合 | 色婷婷综合视频在线观看| 奇米精品一区二区三区在线观看一 | 一区二区在线免费观看| 久久久久久一级片| 日韩片之四级片| 欧美视频在线播放| 91小视频免费观看| 国产ts人妖一区二区| 美女一区二区三区在线观看| 亚洲国产美女搞黄色| 中文字幕日韩一区二区| 国产亚洲女人久久久久毛片| 欧美一区二区三区影视| 欧美日韩国产a| 在线观看一区不卡| 91丨porny丨国产| 成人动漫av在线| 成人午夜看片网址| 国产成a人无v码亚洲福利| 精品一区二区免费| 久久国产夜色精品鲁鲁99| 日本不卡不码高清免费观看| 亚洲一区二区三区不卡国产欧美| 综合欧美亚洲日本| 国产精品久久久久影院| 国产精品久久一级| 亚洲欧美自拍偷拍色图| 国产精品系列在线| 国产精品成人网| 国产精品视频第一区| 国产精品污www在线观看| 国产婷婷色一区二区三区| 国产亚洲va综合人人澡精品| 国产香蕉久久精品综合网| 国产日韩欧美精品电影三级在线| 精品国产麻豆免费人成网站| 精品免费视频.| 精品国产免费人成在线观看| www成人在线观看| 国产三级一区二区| 国产精品欧美综合在线| 中文字幕亚洲不卡| 亚洲国产精品久久艾草纯爱| 五月天久久比比资源色| 美脚の诱脚舐め脚责91| 国内成+人亚洲+欧美+综合在线| 国内精品嫩模私拍在线| 国产成人精品亚洲日本在线桃色| 成人亚洲一区二区一| 91视频免费看| 欧美精品乱码久久久久久按摩| 91精品国产色综合久久ai换脸| 日韩一区二区在线看| 26uuu国产一区二区三区| 欧美—级在线免费片| 亚洲欧美日韩精品久久久久| 亚洲超碰精品一区二区| 免费成人av资源网| 国产成人在线视频网址| 色婷婷综合久久久中文字幕| 91精品国产色综合久久不卡蜜臀| 国产亚洲欧洲997久久综合| 亚洲免费观看高清完整版在线 | 成人av资源站| 欧美亚洲自拍偷拍| 久久综合av免费| 亚洲欧洲日韩综合一区二区| 亚洲国产精品一区二区尤物区| 久久99国产精品久久| jvid福利写真一区二区三区| 欧美日韩国产综合一区二区| 久久综合九色综合97婷婷| 亚洲欧美一区二区三区国产精品 | 成人免费av网站| 欧美日韩精品免费观看视频| 精品福利av导航| 亚洲线精品一区二区三区| 黑人巨大精品欧美一区| 欧美主播一区二区三区| 2021中文字幕一区亚洲| 一区二区三区在线观看动漫| 九九热在线视频观看这里只有精品| 成人av资源网站| 亚洲精品一区二区三区蜜桃下载| 亚洲一二三区在线观看| 懂色av一区二区三区免费观看 | 久久99国产精品免费| 色香蕉成人二区免费| 久久久777精品电影网影网| 午夜婷婷国产麻豆精品| 91毛片在线观看| 国产亚洲欧美日韩俺去了| 青青国产91久久久久久| 欧美影片第一页| 亚洲欧洲av一区二区三区久久| 麻豆中文一区二区| 欧美日本一道本在线视频| 亚洲免费观看在线视频| 成人黄色网址在线观看| 久久久久国产精品厨房| 青青草国产成人99久久| 欧美三级在线视频| 亚洲精品成人精品456| 成人精品视频一区二区三区| 26uuu国产日韩综合| 麻豆精品蜜桃视频网站| 在线电影国产精品| 午夜久久久影院| 欧美视频一区二区三区在线观看 | 久久久久99精品国产片| 日本麻豆一区二区三区视频| 欧美最猛性xxxxx直播| 亚洲女人的天堂| 色综合天天综合| 亚洲欧洲精品一区二区三区| 成人免费看片app下载| 欧美极品美女视频| 国产91在线看| 国产精品久久久一本精品| 成人看片黄a免费看在线| 中文天堂在线一区| 成人黄色免费短视频| 中文字幕日韩一区| 91丨九色丨蝌蚪富婆spa| 亚洲欧美偷拍三级| 日本韩国精品在线| 亚洲午夜精品在线| 91精品国产综合久久久久久久| 香蕉久久一区二区不卡无毒影院| 欧美写真视频网站| 免费在线看成人av| 精品国产乱码久久久久久图片 | 国产一区二区福利视频| 久久亚洲一区二区三区明星换脸| 久久精品久久99精品久久| 国产日产亚洲精品系列| 国产精品白丝av| 国产精品天天看| 91视频观看免费| 亚洲mv在线观看| 精品sm捆绑视频| 成人国产精品免费观看动漫| 中文字幕在线观看不卡视频| 91香蕉视频在线| 婷婷丁香激情综合| 久久久久久久免费视频了| 北条麻妃国产九九精品视频| 一区二区三区色| 欧美一级久久久| 成人黄色在线看| 五月天一区二区| 国产日韩高清在线| 欧美日韩一区国产| 国产乱码精品一区二区三|