posts - 5,  comments - 0,  trackbacks - 0

          我的評論

          看到你在Csdn上寫的,看來不止是我覺得擴展01序列是一個不錯的方法!~~
          很慶幸
          我也只是剛剛寫的,遺漏之處和我說一下,謝謝了!
          在我看來這個題目純粹是一個計算的問題,不需要過多的循環的,當然 僅爭對本題,另外解釋一點,我上面的代碼沒有把負數考慮進去,只要稍微改進一下就可以把負數也包括進去,當然這點還需要商榷,我只是一個猜想,因為準備寫代碼的時候已經下班了,不想在公司繼續熬了,所以代碼寫得很粗糙,沒有優化,另外也沒有過多檢查BUG和遺漏的情況,往諒解下!
          什么都不說 粗略寫的java 代碼 大家研究下

          import java.io.BufferedReader;
          import java.io.IOException;
          import java.io.InputStreamReader;


          public class Test {

          /**
          * @param args
          */
          public static void main(String[] args)
          {
          BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
          String numStr =null;
          long num = -1;
          long tempnum = 0;
          long bitvalue = -1;
          int numbit1 = -1;
          int numbit2 = -1;
          int flag = -1;
          int size = 0;
          boolean isrepeater = false;

          try
          {
          numStr = br.readLine();
          num = Long.parseLong(numStr);

          } catch (NumberFormatException e)
          {
          return;
          } catch (IOException e)
          {
          return;
          }
          //只解析自然數
          if(num <= -1)
          return;

          size = (int)Math.log10(num);

          //1. 先將數字+1
          num ++;
          tempnum = num;

          //2. 判斷是否為重復數字
          if(tempnum / Math.pow(10, size) >= 1)
          size ++;

          bitvalue = (long)Math.pow(10, size - 1);

          for(flag = size - 1; flag >= 1; flag --){

          numbit1 = (int)(tempnum / bitvalue);

          tempnum = tempnum % bitvalue;

          bitvalue = (long)Math.pow(10, flag - 1);
          numbit2 = (int)(tempnum / bitvalue);

          if(numbit1 == numbit2){
          isrepeater = true;
          break;
          }
          }
          //2. 如果是重復數
          if(isrepeater){
          flag --;
          num -= tempnum % Math.pow(10, flag);

          //以下三行是由于考慮的遺漏,解決了以99開頭數字(例 9998)的問題
          //按照我以前的算法99123 得到的結果是100010
          num += (long)Math.pow(10, flag);
          if(Math.log10(num) >= size)
          num += (long)Math.pow(10, flag);

          flag -= 2;
          for(; flag >= 0; flag -=2){
          num += (long)Math.pow(10, flag);
          }
          }

          //4.輸出結果
          System.out.println(num);

          }

          }
          額 我想你們理解錯我的意思了

          10^n 我表示的是10的n次方

          不好意思啊
          re: SqlToolBox1.8.0版下載 Zhjiang 2010-05-13 14:39  
          我這里還是不行,也許是環境的問題,說說我的環境吧!
          我的mysql是裝在虛擬機上的,不是本機,有時候能執行但是反映速度相當的慢,好多時候按了很多下執行鍵都不起作用的,不知道是不是因為數據庫不在本機的原因!~
          re: SqlToolBox1.8.0版下載 Zhjiang 2010-05-13 11:17  
          貌似insert 和delete 有時候不起作用,我用的是mysql數據庫,而且有時候能insert 進去但是沒有任何消息說明insert成功了,很迷茫!~
          這個題如果給我做的話我不會從左往右檢查,相反我會從右往左檢查
          1.將數字+1
          2. 從左往右(從高位到低位)判斷是否有重復數字,沒有的話進入4檢查到第一組重復數字進入3
          2. 將兩個重復數字的以前的(包括重復數字取出來)并且+1,將結果*(10^n) + 01序列
          3. 輸出結果
          例 21001224321
          1.加1 = 21001224322
          2. 是重復數字進入3
          3. 2100 *10^7 + 1* 10^7 + 1* 10^5 + 1* 10^3 + 1* 10^1 =
          21010101010
          4. 輸出 21010101010
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 麟游县| 吉木萨尔县| 高邑县| 利辛县| 随州市| 家居| 宜黄县| 黔江区| 博客| 阿拉善盟| 泸溪县| 固原市| 福鼎市| 金秀| 友谊县| 靖宇县| 台州市| 赤峰市| 中牟县| 聂荣县| 儋州市| 灵璧县| 栾城县| 阜平县| 山阳县| 伊川县| 榆中县| 即墨市| 香港 | 阿拉善左旗| 钟山县| 浠水县| 孙吴县| 徐闻县| 呼伦贝尔市| 祥云县| 寻甸| 临海市| 安吉县| 江油市| 镇安县|