E81086713E446D36F62B2AA2A3502B5EB155

          Java雜家

          雜七雜八。。。一家之言

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            40 Posts :: 1 Stories :: 174 Comments :: 0 Trackbacks
          如題:求連續正整數使得其和為給定的一個正整數
          下面給出我的解法,幾乎可以一步到位求出來
          實現代碼如下:
          /**
          *Author: Koth (
          http://weibo.com/yovn)
          *Date:  2011-12-01
          */
          #include 
          <stdlib.h>
          #include 
          <stdio.h>
          #include 
          <stdint.h>

          int solve(int Y,int& X){
              
          int m=0;
              
          int t=Y;
              
          if(Y<=0){
                  X
          =Y;
                  
          return 1;
              }
              
          while((t&1)==0){
                  m
          +=1;
                  t
          =t>>1;
              }
              
          if(m==32){
                  X
          =Y;
                  
          return 1;
              }
              
          int lastK=32;
              
          for(;lastK>m+1;lastK--){
                  
          if(Y &(1<<(lastK-1))){
                      
                      
          break;
                  }
                      
              }

              
          //its a number st. exp(2,K)
              if(lastK==(m+1)){
                  X
          =Y;
                  
          return 1;
              }
              
          int k=1<<(m+1);
              
          int b=(Y>>m)-(1<<(lastK-m-1));

              X
          =(1<<(lastK-m-2))+(b+1-k)/2;

              
          if(X<=0){
                  k
          =k-1-((0-X)<<1);
                  X
          =0-X+1;
              }
              
              
          return k;

          }

          int main(int argc,char* argv[]){
              
          if(argc<=1){
                  fprintf(stdout,
          "Usage:%s number\n",argv[0]);
                  
          return 0;
              }
              
          int Y=atoi(argv[1]);
              
          int X=0;
              
          int k=solve(Y,X);
              fprintf(stdout,
          "%d=",Y);
              
          for(int i=0;i<k;i++){
                  fprintf(stdout,
          "%d",X+i);
                  
          if(i<(k-1)){
                      fprintf(stdout,
          "+");
                  }
              }
              fprintf(stdout,
          "\n");
              
          return 0;
          }
          posted on 2011-12-01 22:09 DoubleH 閱讀(1783) 評論(2)  編輯  收藏 所屬分類: Memorandum

          Feedback

          # re: 求連續正整數使得其和為給定的一個正整數的構造性解法 [未登錄] 2011-12-13 17:01 tbw
          學習了  回復  更多評論
            

          # re: 求連續正整數使得其和為給定的一個正整數的構造性解法 2011-12-16 18:20 淘寶商城雪地靴
          哈哈不錯。支持下博主  回復  更多評論
            

          主站蜘蛛池模板: 金坛市| 阳山县| 馆陶县| 长汀县| 嫩江县| 镇安县| 永新县| 图们市| 凤庆县| 同江市| 法库县| 海盐县| 克山县| 灵寿县| 陵水| 满洲里市| 泸州市| 古丈县| 利川市| 周至县| 中方县| 扎赉特旗| 绥德县| 临夏县| 九江县| 专栏| 涡阳县| 柞水县| 盐山县| 铜梁县| 扶绥县| 怀仁县| 安阳市| 那曲县| 林甸县| 陈巴尔虎旗| 东丽区| 包头市| 长垣县| 会昌县| 宜兴市|