E81086713E446D36F62B2AA2A3502B5EB155

          Java雜家

          雜七雜八。。。一家之言

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            40 Posts :: 1 Stories :: 174 Comments :: 0 Trackbacks
          如題:求連續(xù)正整數(shù)使得其和為給定的一個正整數(shù)
          下面給出我的解法,幾乎可以一步到位求出來
          實現(xiàn)代碼如下:
          /**
          *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 閱讀(1788) 評論(2)  編輯  收藏 所屬分類: Memorandum

          Feedback

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

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

          主站蜘蛛池模板: 揭阳市| 武冈市| 泊头市| 淮阳县| 津市市| 泗阳县| 永仁县| 晋江市| 巴青县| 饶阳县| 清远市| 绥江县| 房产| 富蕴县| 江山市| 左贡县| 洛川县| 延安市| 白银市| 玛曲县| 江安县| 淮阳县| 清水河县| 繁昌县| 桓仁| 乐清市| 图木舒克市| 浙江省| 泾源县| 广河县| 遵义市| 清徐县| 涪陵区| 时尚| 资兴市| 玛多县| 长治县| 明溪县| 剑阁县| 巴青县| 凤庆县|