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

            DraculaW

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              19 隨筆 :: 0 文章 :: 7 評論 :: 0 Trackbacks
            #ifndef _BIGNUM_HPP_
            #define _BIGNUM_HPP_

            #include <vector>
            #include <string>
            #include <iostream>

            using namespace std;

            class BigNum;

            BigNum operator+(const BigNum& lhs, const BigNum& rhs);

            ostream& operator<<(ostream& os, const BigNum& rhs);

            void Add(const BigNum& lhs, const BigNum& rhs, BigNum& res);

            class BigNum
            {
            public:
                BigNum(int n) : value(n){}
                BigNum(const string& s);
                friend BigNum operator+(const BigNum& lhs, const BigNum& rhs);
                friend ostream& operator<<(ostream& os, const BigNum& rhs);
                friend void Add(const BigNum& lhs, const BigNum& rhs, BigNum& res);
            private:
                vector<char> value;   
            };

            #endif

            #include "BigNum.hpp"

            BigNum::BigNum(const string& s):value(s.length())
            {
                int j = value.size();
                for(string::const_iterator it = s.begin(); it != s.end(); it++)
                {
                    j--;       
                    value[j] = *it;
                }
            }

            ostream& operator<<(ostream& os, const BigNum& rhs)
            {
                size_t i = rhs.value.size();
                bool zero = false;
                if( i == 1)
                    return os << rhs.value[0];

                if(rhs.value[ i - 1 ] == '0')
                    zero = true;
               
                while( i > 0 )
                {
                    i--;
                    while(zero == true)
                    {
                        i--;
                        if(rhs.value[i] != '0')
                            zero = false;
                    }
                    os << rhs.value[i];
                }
                return os;
            }

            void Add(const BigNum& lhs, const BigNum& rhs, BigNum& res)
            {
                int carry = 0;
                char c = 0;
                char tmp = 0;
                size_t i = 0;
                for( ; i < rhs.value.size(); i++)
                {
                    tmp = lhs.value[i] + rhs.value[i] + carry - '0';

                    if( tmp > '9' )
                    {
                        carry = 1;
                        tmp -= 10;
                    }
                    else
                    {
                        carry = 0;
                    }
                    res.value[i] = tmp;
                }

                while( carry != 0 && i < lhs.value.size() )
                {
                    tmp = lhs.value[i] + carry;
                    if( tmp > '9' )
                    {
                        carry = 1;
                        tmp = '0';
                    }
                    else
                    {
                        carry = 0;
                    }
                    res.value[i] = tmp;
                    i++;
                }

                if( carry > 0)
                    res.value[i] = '1';

            }

            BigNum operator+(const BigNum& lhs, const BigNum& rhs)
            {
                size_t lsize, rsize;
                lsize = lhs.value.size();
                       rsize = rhs.value.size();
                size_t n = lsize > rsize ? lsize : rsize;   
                BigNum res(n + 1);
                res.value[0] = '0';
               
                if( lsize > rsize )
                {
                         Add(lhs, rhs, res);
                }
                else
                {
                    Add(rhs, lhs, res);
                }
               
                return res;
            }

            //我自己實現的大數的加法的程序。。 終于驗證可以使用了 呵呵
            這個程序寫好了 也算可以了了我的心愿了的
            去年的某個時候 在杭州的UT斯達康面試 上機題就是這一道 我死活沒有憋出來,當時就很后悔 為什么不好好的看看論壇上的帖子 對上面的問題做做呢?那樣子的話 也許我就不會這么悲慘了,老是在哪里自怨自唉。
            總結起來 我其實是眼高手低,然后從來都被寵著沒有認清過自己。小學初中,老媽老師都說我數學學的還不錯,其實是有點小聰明,分數還是那么可憐的一點點;到高中,因 為學校比較一般,考的名次看起來很美,被假象迷惑了;大學,因為自己有點基礎,被給哥封為軟件最好,也有點沾沾自喜;到了這個公司,也許因為我身體的原 因,也有點面試時做題速度超快的原因,被經理說我程序不錯,還是沒有擺正自己的位子。
            受點挫折才好。嗯
            呵呵, 心態 , 心態才是一切。
            不要眼高手低
            posted on 2007-11-15 20:35 DraculaW 閱讀(201) 評論(0)  編輯 收藏 引用
            99久久夜色精品国产网站| 久久人人爽人人爽人人AV| 色综合合久久天天综合绕视看| 国产精品久久久久9999高清| 91久久精品电影| 99久久国产精品免费一区二区| 国产成人精品免费久久久久| 国产精品午夜久久| 亚洲AV日韩AV永久无码久久| 欧美精品一区二区精品久久| 中文字幕久久精品| 91久久国产视频| 久久青青草原亚洲av无码app| 久久久久久亚洲精品无码| 亚洲AV日韩精品久久久久久久| 久久99国产一区二区三区| 欧美一区二区三区久久综| 久久伊人中文无码| 91精品国产91久久久久久青草 | 成人亚洲欧美久久久久| 综合网日日天干夜夜久久| 香蕉久久一区二区不卡无毒影院| 精品久久久久久无码不卡| 久久狠狠一本精品综合网| 大伊人青草狠狠久久| 久久久无码精品亚洲日韩蜜臀浪潮| 一极黄色视频久久网站| 久久一区二区三区99| 国产精品热久久无码av| 天天爽天天爽天天片a久久网| 97久久久精品综合88久久| 中文字幕热久久久久久久| 久久久久久久91精品免费观看| 久久精品99无色码中文字幕| 久久精品草草草| 久久青青草原精品影院| 91精品婷婷国产综合久久 | 久久精品国产69国产精品亚洲| 一本一道久久综合狠狠老| 无码人妻久久久一区二区三区| 亚洲AV日韩AV永久无码久久|