• <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>
            隨筆-145  評論-173  文章-70  trackbacks-0
            最近看很多ACM大牛,感覺自己在算法方面很菜,為此有時間做做ACM題目吧,從最簡單的開始,慢慢搞。
            昨天看到了杭電ACM的1002題,然后想了會,把大數(shù)的加法部分做了,然后今天具體就完成了輸入和計算的處理模塊。提交了幾次都出現(xiàn)了presentation error問題,發(fā)現(xiàn)對于結果的格式要求還是很嚴格的。為此修改了幾次,終于過了。發(fā)現(xiàn)通過率才18%,還是有點自豪感,雖然比較菜,但是還是慢慢搞吧。

            #include <iostream>
            #include 
            <string>
            #include 
            <vector>
            using namespace std;

            int *sum(int *a,int aNum,int *b,int bNum,int &FirstFlag)//人為的讓左邊數(shù)組較長(大) 
            {
                
            int maxNum = aNum;
                
            int *= new int [maxNum];    //可能有進位
                int flag = 0;
                
            for(int i = 0; i < maxNum; i++)
                {
                    
            if(i < bNum )
                    {
                        
            if( (a[aNum - i - 1+ b[bNum - i - 1+ flag) >= 10 )
                        {
                            c[aNum 
            - i - 1= a[aNum - i - 1+ b[bNum - i - 1+ flag - 10;
                            flag 
            = 1;    //flag一定是在計算之后得到的
                        }
                        
            else
                        {
                            c[aNum 
            - i - 1= a[aNum - i - 1+ b[bNum - i - 1+ flag;
                            flag 
            = 0;
                        }
                    }
                    
            else
                    {
                        
            if( (a[aNum - i - 1+ flag) >= 10)
                        {
                            c[aNum 
            - i - 1= a[aNum - i - 1+ flag - 10;
                            flag 
            = 1;
                        }
                        
            else
                        {
                            c[aNum 
            - i - 1= a[aNum - i - 1+ flag;
                            flag 
            = 0;
                        }
                        
                    }
                }
                
            if(flag == 1)
                    FirstFlag 
            = 1;
                
            return c;
            }

            int main()
            {
              
            int number;
              cin 
            >> number;
              
            int i = 0;
              
            string a,b;
              vector
            <string>  vec;
              
            while(i < number)
              {
                  cin 
            >> a >> b;
                  vec.push_back(a);
                  vec.push_back(b);
                  i
            ++;
               }
              
            for(i = 0; i <  number; i++)
              {
                 
            // cout << vec[2 * i] << "      "<< vec[2 * i + 1] << endl;轉換成數(shù)組
                 int aNum = vec[2 * i].length();
                 
            int bNum = vec[2 * i + 1].length(); 
                 
            int maxNum = (aNum > bNum) ? aNum : bNum;
                 
            int *= new int [maxNum];
                 
            int *= new int [aNum];
                 
            int *= new int [bNum];
                 
            for(int k = 0; k < aNum; k++)
                 {
                     a[k] 
            = vec[2 * i].at(k) - '0';    
                  }
                  
            for(int j = 0; j < bNum; j++)
                  {
                      b[j] 
            = vec[2 * i + 1].at(j) - '0';
                  }
                   
            int FirstFlag = 0;
                 
            if(aNum > bNum)
                 {
                    c 
            = sum(a,aNum,b,bNum,FirstFlag);
                    cout 
            << "Case " << i+1 << ":" << endl;
                    cout 
            << vec[2 * i] << " + " << vec[2 * i + 1<< " = ";
                    
            if(FirstFlag == 1)
                        cout 
            << FirstFlag ;
                    
            for(int m = 0; m < aNum; m++)
                        cout 
            << c[m];
                    
                    cout 
            << endl;
                    
            if(i != (number-1))
                        cout 
            << endl;
                 }
                 
            else
                 {
                    c 
            = sum(b,bNum,a,aNum,FirstFlag);
                    cout 
            << "Case " << i+1 << ":"<< endl;
                    cout 
            << vec[2 * i] << " + " << vec[2 * i + 1<< " = ";
                    
            if(FirstFlag == 1)
                        cout 
            << FirstFlag ;
                    
            for(int m = 0; m < bNum; m++)
                        cout 
            << c[m];
                    
                    cout 
            << endl;
                    
            if(i != (number-1))
                        cout 
            << endl;
                 }
                 
                 delete []a;
                 delete []b;
                 delete []c; 
              }    
              
            return 0;
            }
                 

            總結來說就是:
            (1)先從一個個模塊開始吧,比如大數(shù)加法函數(shù),然后再考慮輸入格式,讀取,輸出等等其他。
            (2)大數(shù)的話還是有很多要考慮的,進位的問題,補齊等問題,開始寫這個函數(shù)的時候都沒有注意到,真夠菜的,改了幾遍才過。
            (3)效率啥的覺得不高,各位能夠優(yōu)化的歡迎交流,另外關于ACM有興趣的同學可以討論下,我才剛入門,歡迎指教。



            posted on 2011-06-12 20:09 deercoder 閱讀(5199) 評論(2)  編輯 收藏 引用 所屬分類: ACM

            評論:
            # re: 杭電ACM 1002題--大數(shù)加法 2011-06-13 17:49 | 路人
            寫得不好
            思路不清
            看劉汝佳的白書吧
            入門起點不能太低  回復  更多評論
              
            # re: 杭電ACM 1002題--大數(shù)加法 2011-06-14 21:42 | 劉暢
            @路人
            謝謝,目前正在看,爭取先做些水題來入手下。  回復  更多評論
              
            日韩亚洲国产综合久久久| 久久综合噜噜激激的五月天| 国产成人久久777777| 伊人色综合久久天天| 大蕉久久伊人中文字幕| 久久天天躁狠狠躁夜夜不卡 | 久久精品国产亚洲AV久| 99久久国产宗和精品1上映| 精品久久久久久久| 日韩精品无码久久一区二区三| 亚洲AV无一区二区三区久久| 久久er国产精品免费观看2| 久久人妻AV中文字幕| 94久久国产乱子伦精品免费| 久久精品国产久精国产果冻传媒 | 久久精品国产男包| 91精品国产高清久久久久久91 | 久久综合九色综合网站| 久久久久噜噜噜亚洲熟女综合| 无码AV中文字幕久久专区| 久久人妻少妇嫩草AV无码蜜桃| 久久91精品国产91久久麻豆| 久久人人爽人人爽人人片av麻烦 | 欧美久久精品一级c片片| 亚洲国产精品无码久久一线| 久久国产精品免费| 久久精品国产一区二区电影| 伊人久久免费视频| 亚洲欧美日韩精品久久| 亚洲国产精品人久久| 久久香蕉国产线看观看乱码| 精品久久久久久无码专区| 亚洲欧美日韩中文久久| 久久久SS麻豆欧美国产日韩| 婷婷久久五月天| 久久亚洲国产成人影院网站| 国产亚州精品女人久久久久久| 久久久精品一区二区三区| 日韩av无码久久精品免费| 亚洲AV日韩AV永久无码久久| 久久久久久精品免费免费自慰|