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

/** 
  * 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());
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容