• <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題,然后想了會,把大數的加法部分做了,然后今天具體就完成了輸入和計算的處理模塊。提交了幾次都出現了presentation error問題,發現對于結果的格式要求還是很嚴格的。為此修改了幾次,終于過了。發現通過率才18%,還是有點自豪感,雖然比較菜,但是還是慢慢搞吧。

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

            int *sum(int *a,int aNum,int *b,int bNum,int &FirstFlag)//人為的讓左邊數組較長(大) 
            {
                
            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;轉換成數組
                 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)先從一個個模塊開始吧,比如大數加法函數,然后再考慮輸入格式,讀取,輸出等等其他。
            (2)大數的話還是有很多要考慮的,進位的問題,補齊等問題,開始寫這個函數的時候都沒有注意到,真夠菜的,改了幾遍才過。
            (3)效率啥的覺得不高,各位能夠優化的歡迎交流,另外關于ACM有興趣的同學可以討論下,我才剛入門,歡迎指教。



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

            評論:
            # re: 杭電ACM 1002題--大數加法 2011-06-13 17:49 | 路人
            寫得不好
            思路不清
            看劉汝佳的白書吧
            入門起點不能太低  回復  更多評論
              
            # re: 杭電ACM 1002題--大數加法 2011-06-14 21:42 | 劉暢
            @路人
            謝謝,目前正在看,爭取先做些水題來入手下。  回復  更多評論
              
            久久精品毛片免费观看| .精品久久久麻豆国产精品| 久久中文娱乐网| 国产99久久久国产精品~~牛| 久久国产高清一区二区三区| 久久久久99这里有精品10| 国产亚洲精品自在久久| 欧美亚洲日本久久精品| 久久99国产精品尤物| 污污内射久久一区二区欧美日韩| 亚洲va中文字幕无码久久不卡| 精品久久久久国产免费| 久久国产精品无码HDAV| 噜噜噜色噜噜噜久久| 久久久久人妻精品一区三寸蜜桃| 亚洲第一极品精品无码久久| 色偷偷88欧美精品久久久 | 国产精品久久波多野结衣| 久久久久无码专区亚洲av| 狠狠色丁香久久综合五月| 热re99久久6国产精品免费| 久久精品国产99国产精品| 国内精品久久国产大陆| 熟妇人妻久久中文字幕| 精产国品久久一二三产区区别| 国产精品成人99久久久久| 丁香五月网久久综合| 国产精品青草久久久久婷婷| 日本强好片久久久久久AAA| 久久精品中文无码资源站| 国产精品久久久久久久人人看| 国产成人久久777777| 国产精品综合久久第一页| 国内精品久久久久久久涩爱 | 国产精品免费久久久久影院| 亚洲国产精品无码久久久蜜芽| 久久久久亚洲av成人网人人软件 | 国产精品亚洲美女久久久| 国产成人精品久久亚洲高清不卡| 午夜不卡888久久| 狠狠人妻久久久久久综合蜜桃|