• <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>

            逛奔的蝸牛

            我不聰明,但我會很努力

               ::  :: 新隨筆 ::  ::  :: 管理 ::
            #include <iostream>
            #include 
            <cstdlib>

            const unsigned int MAX_ELEMENT_VALUE_PLUS_1 = 10000;
            const unsigned int BITS_MAX_ELEMENT_VALUE = 4;

            /**
             * 求出數(shù)組中從左到右中第一個不為0的元素的下標
             
            */
            size_t posOfFirstNoZero(unsigned 
            int *array, size_t length) {
                size_t pos 
            = 0;
                
            for (size_t i = 0; i < length; i++) {
                    
            if (array[i] != 0) {
                        pos 
            = i;
                        
            break;
                    }
                }

                
            return pos;
            }

            /**
             * 數(shù)與大數(shù)相乘, 大數(shù)放在一個數(shù)組中
             
            */
            void multiply(unsigned int *array, unsigned int num, size_t length) {
                unsigned 
            int carry = 0;
                unsigned 
            int temp = 0;
                

                
            // 求出第一個非0元素的下標, 
                
            // 由于相乘可能會進位, 所以可能會使用到第一個非0元素的前一個元素.
                size_t end = posOfFirstNoZero(array, length);
                
            for (size_t index = length - 1; index >= end - 1; index--) {
                    temp 
            = array[index] * num + carry;
                    array[index] 
            = temp % MAX_ELEMENT_VALUE_PLUS_1;
                    carry 
            = temp / MAX_ELEMENT_VALUE_PLUS_1;
                    
                    
            // 否則, 當index為0時, 因為是unsigned int, 所以index--結(jié)果為最大正數(shù)
                    
            // 會造成死循環(huán), 這種情況下end - 1為0.
                    if (index == 0) {
                        
            break;
                    }
                }
            }

            /**
             * 打印出大數(shù)
             
            */
            void print(unsigned int *array, size_t length) {
                
            // 數(shù)組從左到右中第一個不為0的元素的下標
                size_t start = posOfFirstNoZero(array, length);

                
            for (size_t i = start; i < length; i++) {
                    
            int temp = array[i];
                    
            int bits = 0;
                    
            // 求出數(shù)組中每個元素的位數(shù)
                    while (temp != 0) {
                        
            ++bits;
                        temp 
            /= 10;
                    }

                    
            // 如果一個數(shù)的位數(shù)不足BITS_MAX_ELEMENT_VALUEU位, 這個數(shù)的前面用0補足.
                    for (size_t j = 0; j < BITS_MAX_ELEMENT_VALUE - bits; j++) {
                        std::cout 
            << 0;
                    }

                    
            if (bits != 0) {
                        std::cout 
            << array[i] << " ";
                    } 
            else {
                        std::cout 
            << " ";
                    }
                }
            }

            int main(int argc, char *argv[]) {
                
            const size_t length = 2;
                unsigned 
            int result[length] = { 0 };
                result[length 
            - 1= 1;
                unsigned 
            int n;

                std::cout 
            << "Calculate 1! + 2! + 3! +  + n!" << std::endl;
                std::cout 
            << "Please input a positive number: n = ";
                std::cin 
            >> n;

                
            // 計算階乘
                for (unsigned int i = 1; i <= n; i++) {
                    multiply(result, i, length);
                    print(result, length);
                    std::cout 
            << std::endl;
                }

                size_t start 
            = posOfFirstNoZero(result, length);
                std::cout 
            << "數(shù)組中還有" << start << "個空位" << std::endl;

                
            return EXIT_SUCCESS;
            }

            posted on 2008-03-18 15:30 逛奔的蝸牛 閱讀(920) 評論(0)  編輯 收藏 引用 所屬分類: C/C++
            久久久黄片| 久久99精品国产99久久6| 亚洲va国产va天堂va久久| 久久久久久久波多野结衣高潮| 久久亚洲精品无码VA大香大香| 国内精品九九久久久精品| 精品国产乱码久久久久久浪潮| 麻豆av久久av盛宴av| 青青青伊人色综合久久| 亚洲精品WWW久久久久久| 2021精品国产综合久久| 中文成人久久久久影院免费观看| 久久国产亚洲精品无码| 亚洲欧洲久久av| 国内精品久久久久久久影视麻豆 | 要久久爱在线免费观看| 久久国产免费观看精品3| 一本久久精品一区二区| 国产精品内射久久久久欢欢| 精品无码久久久久久尤物| 亚洲性久久久影院| 久久精品无码一区二区三区免费 | 久久精品a亚洲国产v高清不卡| 久久人人爽人人爽AV片| 久久香蕉一级毛片| 97精品久久天干天天天按摩| 亚洲精品乱码久久久久66| 偷偷做久久久久网站| 日韩欧美亚洲综合久久影院Ds| 久久91精品国产91久久小草| 亚洲国产欧洲综合997久久| 国产精品久久久久久久久软件 | 亚洲欧美国产日韩综合久久| 久久精品无码专区免费| 99久久国产亚洲高清观看2024 | 狠狠色婷婷久久综合频道日韩| 久久精品中文字幕一区| 精品久久久久久99人妻| 国产综合成人久久大片91| 热RE99久久精品国产66热| 伊人久久大香线蕉无码麻豆|