• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            鍵盤上的舞者

            My Email: marckywu@gmail.com
            隨筆 - 19, 文章 - 0, 評論 - 3, 引用 - 0
            數據加載中……

            超大整數的加法運算

                   所謂超大數就是int, 甚至long int等數據類型無法直接對其存儲的整數。對于這種超大數的加法運算,我的解決方案是:
                   首先將輸入的大數轉化為字符串存儲起來,這樣一來,字符串的首字符就對應著大數的最高位,末字符就對應大數的最低位。
                   然后,從兩個字符串的末尾開始取出一個字符,將其轉化為一個一位整數后進行相加(這里相加的時候還需要加上進位標志的值),這樣將產生兩種情況:
                          一、相加后大于等于10,需要進1位。
                          二、相加后小于10,不需要進位。
                   待對兩個字符串中的所有位字符都處理完成后,就得到了一個相加的結果字符串,這個結果字符串的不足之處是按低位到高位的順序排列的。所以還得對其高低位的對應字符進行交換處理,從而得出正確的結果和字符串。。。

            大數相加的函數C代碼如下:
            /*
             *功能:addBigNum函數的功能為對兩個大數進行相加運算。
             *參數:pa, pb指向需要相加的兩個大數的字符串表示。
             *          psum指向的緩沖區用來存儲相加的結果和的字符串表示。
             *返回值:無
             
            */
            void addBigNum(char *pa, char *pb, char *psum)
            {
                
            int indexa, indexb, index;
                
            int sum, addone;

                addone 
            = 0//向高位進一標志
                index = 0;  //psum的位置索引

                
            //indexa, indexb分別索引到字符串stra, strb的最后一個字符
                indexa = strlen(pa) - 1;
                indexb 
            = strlen(pb) - 1;
                
                
            for ( ; indexa >= 0 || indexb >= 0; indexa--, indexb--) {
                    
            //處理字符串長度不同的運算
                    if (indexa >= 0 && indexb >= 0) { 
                        sum 
            = (pa[indexa] - '0'+ (pb[indexb] - '0'+ addone;
                    } 
            else if (indexa >= 0 && indexb < 0) {
                        sum 
            = (pa[indexa] - '0'+ addone;
                    } 
            else if (indexa < 0 && indexb >= 0) {
                        sum 
            = (pb[indexb] - '0'+ addone;
                    }
                    
                    
            if (sum >= 10) {
                        
            //兩個一位數組相加最多向高位進1
                        psum[index++= sum - 10 + '0';
                        addone 
            = 1;
                    } 
            else {
                        psum[index
            ++= sum + '0';
                        addone 
            = 0;
                    }
                }

                psum[index] 
            = '\0';
                swapStr(psum);
                
                
            return;
            }

            void swapStr(char *str)
            {
                
            //對str指向的字符串中的字符進行逆向重排.
                int len, i;
                
            char temp;

                len 
            = strlen(str);
                
                
            for (i = 0; i < len / 2; i++) {
                    temp 
            = str[i];
                    str[i] 
            = str[len - i - 1];
                    str[len 
            - i - 1= temp;
                }
            }


            posted on 2009-06-30 16:02 Marcky 閱讀(1003) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

            久久性生大片免费观看性| 亚洲午夜福利精品久久| 久久国产欧美日韩精品| 2021久久国自产拍精品| 国产AV影片久久久久久| 免费无码国产欧美久久18| 亚洲精品乱码久久久久久按摩| 久久天天躁狠狠躁夜夜躁2O2O| 久久成人精品视频| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 久久久青草青青亚洲国产免观| 国产99久久久久久免费看| 亚洲午夜久久久久久噜噜噜| 99久久综合狠狠综合久久| 国内精品伊人久久久影院 | 国内精品伊人久久久久妇| 亚洲精品国产成人99久久| 国产精品乱码久久久久久软件| 青青青伊人色综合久久| 久久亚洲欧美国产精品| 亚洲国产成人乱码精品女人久久久不卡 | 亚洲美日韩Av中文字幕无码久久久妻妇 | 久久国产三级无码一区二区| 亚洲狠狠婷婷综合久久久久| 久久精品国产一区二区三区| 777米奇久久最新地址| 亚洲国产精品无码久久一区二区| 久久久久18| 99久久99久久精品国产片果冻| 蜜臀av性久久久久蜜臀aⅴ| 久久综合久久综合亚洲| 亚洲精品99久久久久中文字幕| 成人精品一区二区久久| 久久99国产精一区二区三区| 久久久久99精品成人片试看| 色偷偷88888欧美精品久久久| 久久久无码精品亚洲日韩京东传媒 | 国产精品综合久久第一页| 亚洲国产精品久久久久婷婷老年| 久久97精品久久久久久久不卡| 99久久精品费精品国产一区二区|