1+11+111 + … + 111…111(一共2002个1) 结果中1出现了多少次(程序实现)

自己用代码实现(Java) 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/**
* Created by wangliang on 16-12-1.
*/
public class Demo {
public static void main(String[] args) {
long start = System.currentTimeMillis();
System.out.println("1一共出现 " + get1Count(2002) + "次");
System.out.println("time:" + (System.currentTimeMillis() - start));
}
// 1 + 11 + ... + 111...111(num个1)
private static int get1Count(int num) {
long ret = 0;
int c = 0;
String strRet;
for (int i = 1; i <= num; i++) {
ret += getNum(i, c);
if (ret >= 123456790) {
strRet = String.valueOf(ret);
if (strRet.contains("123456790")) {
strRet = strRet.replace("123456790", "");
ret = Long.parseLong(strRet);
c++;
}
}
System.out.println("ret:" + ret + ", c:" + c + ", i: " + i);
}
char[] arr = String.valueOf(ret).toCharArray();
for (int i = 0; i < arr.length; i++) {
if (arr[i] == '1') {
c++;
}
}
return c;
}
private static long getNum(int num, int c) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < num - c * 9; i++) {
builder.append("1");
}
return Long.parseLong(builder.toString());
}
}

答案:224次