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