看到你在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