• <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 | 劉暢
            @路人
            謝謝,目前正在看,爭取先做些水題來入手下。  回復  更多評論
              
            亚洲国产精品婷婷久久| 一本久道久久综合狠狠爱| 久久久久久久精品妇女99| 美女久久久久久| 久久久久亚洲精品无码网址 | 久久综合亚洲鲁鲁五月天| 国产一区二区三精品久久久无广告| 国产精品久久影院| 99久久无色码中文字幕| 狠狠色丁香婷综合久久| 国产激情久久久久影院老熟女免费 | 亚洲AV无码久久寂寞少妇| 久久综合久久自在自线精品自 | 日日狠狠久久偷偷色综合96蜜桃| 久久久久99精品成人片三人毛片| 亚洲国产高清精品线久久 | 久久久久久午夜成人影院 | 99久久国产综合精品网成人影院| 99久久中文字幕| 久久久WWW成人免费精品| 香蕉99久久国产综合精品宅男自 | 996久久国产精品线观看| 国产ww久久久久久久久久| 性做久久久久久久久| 久久婷婷五月综合97色| 国产成人精品久久亚洲高清不卡 | 久久久久这里只有精品| 一本色综合久久| 久久国产精品成人免费| 中文字幕亚洲综合久久菠萝蜜| 久久久久亚洲AV无码网站| 久久丝袜精品中文字幕| 97久久香蕉国产线看观看| 久久影院午夜理论片无码| 91精品国产高清久久久久久io | 免费精品久久久久久中文字幕| 亚洲精品无码成人片久久| 国产精品狼人久久久久影院 | 大香网伊人久久综合网2020| 伊人久久大香线蕉无码麻豆| 狠狠色丁香久久综合婷婷|