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

            #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];    //可能有進(jìn)位
                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一定是在計(jì)算之后得到的
                        }
                        
            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;轉(zhuǎn)換成數(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;
            }
                 

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



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

            評論:
            # re: 杭電ACM 1002題--大數(shù)加法 2011-06-13 17:49 | 路人
            寫得不好
            思路不清
            看劉汝佳的白書吧
            入門起點(diǎn)不能太低  回復(fù)  更多評論
              
            # re: 杭電ACM 1002題--大數(shù)加法 2011-06-14 21:42 | 劉暢
            @路人
            謝謝,目前正在看,爭取先做些水題來入手下。  回復(fù)  更多評論
              
            欧美精品九九99久久在观看| 99久久做夜夜爱天天做精品| 久久伊人精品一区二区三区| 国产99久久九九精品无码| 无码日韩人妻精品久久蜜桃 | 97久久综合精品久久久综合| 一本色道久久99一综合| 久久久久九九精品影院| 99久久精品国产综合一区| 国产麻豆精品久久一二三| 精品国产乱码久久久久久郑州公司 | 亚洲精品无码专区久久久| 国产成人精品综合久久久久| 无码人妻久久一区二区三区蜜桃| 一级做a爰片久久毛片毛片| 欧美激情精品久久久久久久| 午夜精品久久久久久| 亚洲人成网站999久久久综合 | 狠狠狠色丁香婷婷综合久久五月| 日韩av无码久久精品免费| 7777精品久久久大香线蕉| 久久香蕉超碰97国产精品| 久久人爽人人爽人人片AV| jizzjizz国产精品久久| 久久久久久狠狠丁香| 久久精品三级视频| 久久精品人妻中文系列| 色婷婷综合久久久久中文 | 亚洲а∨天堂久久精品| 久久天天躁夜夜躁狠狠躁2022| 久久久一本精品99久久精品66| 国产欧美久久久精品| 欧美久久久久久午夜精品| 麻豆精品久久久久久久99蜜桃| 亚洲中文字幕无码久久精品1| 国产精品久久久久久久久鸭| Xx性欧美肥妇精品久久久久久| 久久久国产99久久国产一| 久久久久亚洲AV无码麻豆| 激情综合色综合久久综合| 亚洲国产精品无码久久久蜜芽|