美文网首页
1+11+111 + ... + 111...111(一共200

1+11+111 + ... + 111...111(一共200

作者: wangliang0209 | 来源:发表于2016-12-02 11:35 被阅读0次
/** 
  * 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());
    }
}

相关文章

网友评论

      本文标题:1+11+111 + ... + 111...111(一共200

      本文链接:https://www.haomeiwen.com/subject/gtteuttx.html