• <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热成人精品热久久| 久久精品国产亚洲av麻豆小说| 88久久精品无码一区二区毛片 | 久久这里只有精品视频99| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 久久久一本精品99久久精品88 | 国产精品无码久久久久久| 国产成人99久久亚洲综合精品| 欧美日韩精品久久久久| 亚洲va久久久噜噜噜久久天堂 | 久久亚洲精品国产精品| 久久亚洲国产成人影院网站| 九九精品99久久久香蕉| 久久婷婷五月综合成人D啪 | 久久精品国产亚洲AV大全| 久久婷婷色综合一区二区| 9久久9久久精品| 亚洲∧v久久久无码精品| 久久无码一区二区三区少妇| 久久99精品国产| 久久棈精品久久久久久噜噜| 狠狠综合久久AV一区二区三区| 久久精品成人免费国产片小草| 久久免费高清视频| 久久精品国产亚洲AV电影| 热re99久久6国产精品免费| 久久丫忘忧草产品| 香蕉99久久国产综合精品宅男自| 国产毛片久久久久久国产毛片| 久久久久久免费一区二区三区 | 国内精品伊人久久久久av一坑 | 久久精品无码av| 国内精品久久久久久久影视麻豆 | 亚洲午夜久久久久妓女影院|