62,610
社区成员
发帖
与我相关
我的任务
分享
package cn.array;
/**
* 计算enterNum之前正数所有1的个数,比如:1->1;10->2;11->4;12->5.......
* @author liaoyi
* @version 1.0.0
* @2008-11-3 下午03:22:10
*/
public class HasOne {
public static void main(String args[]) {
System.out.println(new HasOne().f(111111111));
}
public int f(int enterNum){
int oneNum = 1;
for(int i=enterNum;i>1;i--){
String strNum = new Integer(i).toString();
for(int j = 0;j<strNum.length();j++){
if(strNum.substring(j, j+1).equals("1"))
oneNum++;
}
}
return oneNum;
}
}
int x =111111111;
int result = 0;
long start = System.nanoTime();//纪录循环开始时间
for( int i=10; i<=x*10; i=i*10) {
result += x/i*(i/10);//默认当前位数是0
if (x%i/(i/10)==1) {//当前位数是1
result += x%(i/10)+1;
}else if(x%i/(i/10)>1) {//当前位数大于1
result += i/10;
}
}
long end = System.nanoTime();//结束时间
System.out.println("花费时间:"+(end-start)+"毫微秒");
System.out.println(result);
long teststart = System.currentTimeMillis();
for (int i=0; i<=x; i++) {
String s = i+"";
String s1 = s.replaceAll("1", "");
testresult +=s.length()-s1.length();
}
long testend = System.currentTimeMillis();
int x =111111111;
int result = 0;
int testresult = 0;
long start = System.currentTimeMillis();//纪录循环开始时间
for( int i=10; i<=x*10; i=i*10) {
result += x/i*(i/10);//默认当前位数是0
if (x%i/(i/10)==1) {//当前位数是1
result += x%(i/10)+1;
}else if(x%i/(i/10)>1) {//当前位数大于1
result += i/10;
}
}
long end = System.currentTimeMillis();//结束时间
System.out.println("花费时间:"+(end-start));
System.out.println(result);