• <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 閱讀(199) 評論(0)  編輯 收藏 引用
            精品国产一区二区三区久久久狼| 久久久久久午夜精品| 91精品国产9l久久久久| 91超碰碰碰碰久久久久久综合| 国产精品成人99久久久久| 亚洲美日韩Av中文字幕无码久久久妻妇| 综合网日日天干夜夜久久| 国产精品久久久久久福利漫画| 亚洲午夜精品久久久久久人妖| 日本WV一本一道久久香蕉| 久久99热狠狠色精品一区| 国产69精品久久久久APP下载| 国产精品美女久久久m| 亚洲精品国精品久久99热| 久久精品国产69国产精品亚洲| 亚洲日韩欧美一区久久久久我| AV无码久久久久不卡网站下载| 久久亚洲sm情趣捆绑调教| 国产精品美女久久久网AV| 国内精品久久久久影院日本| 香蕉久久AⅤ一区二区三区| 国产一区二区三区久久精品| 欧美精品国产综合久久| 久久综合成人网| 97久久精品人人做人人爽| 久久99精品国产自在现线小黄鸭 | 久久综合亚洲色HEZYO国产| 久久久无码精品亚洲日韩按摩| 亚洲欧美成人久久综合中文网| 精品亚洲综合久久中文字幕| 新狼窝色AV性久久久久久| 久久夜色精品国产亚洲| 午夜精品久久影院蜜桃| 免费一级欧美大片久久网| 久久国产精品国语对白| 精品999久久久久久中文字幕| 久久天天躁狠狠躁夜夜躁2O2O| 成人久久免费网站| 亚洲综合伊人久久大杳蕉| 亚洲精品乱码久久久久久自慰| 中文字幕久久精品无码|