`
yiheng
  • 浏览: 156828 次
社区版块
存档分类

编程之美-1的数目 解法及性能比较

 
阅读更多

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Handler;

import javax.swing.text.StyledEditorKit.ForegroundAction;

public class Chapter1 {
	public static void main(String[] args) throws NumberFormatException,
			IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String line;
		System.out.print("input==>");
		while ((line = br.readLine()) != null) {
			if (line.trim().equals("q"))
				break;
			int n = 0;
			try {
				n = Integer.parseInt(line);
			} catch (Exception e) {
				System.out.println("input error");
				System.out.print("input==>");
				continue;
			}
			System.out.println("-----------handle1-----------------");
			long start = System.currentTimeMillis();
			System.out.println("1 total count:"+handle1(n));
			System.out.println("total time:"
					+ (System.currentTimeMillis() - start));
			System.out.println("-----------handle2-----------------");
			start = System.currentTimeMillis();
			System.out.println("1 total count:"+handle2(n));
			System.out.println("total time:"
					+ (System.currentTimeMillis() - start));
			System.out.print("input==>");
		}
	}

	// ///////////////解法1////////////////////////
	public static int handle2(int n) {
		int result = 0;
		for (int i = 1; i <= n; i++) {
			int temp = count2(i);
			result += temp;
		}
		return result;
	}

	public static int count2(int n) {
		int count = 0;
		while (n != 0) {
			count += (n % 10 == 1) ? 1 : 0;
			n /= 10;
		}
		return count;
	}

	// /////////////解法2//////////////////////////
	public static int handle1(int n) {
		int result = 0;
		for (int i = 1; i <= n; i++) {
			int temp = count1(new Integer(i).toString());
			result += temp;
		}
		return result;
	}

	public static int count1(String str) {
		int result = 0;
		for (int i = 0; i < str.length(); i++) {
			char c = str.charAt(i);
			if (c == '1')
				result++;
		}
		return result;
	}

}

输出结果:

input==>100000000
-----------handle1-----------------
1 total count:80000001
total time:11656
-----------handle2-----------------
1 total count:80000001
total time:8937
input==>






分享到:
评论

相关推荐

    奇数值单元格的数目1

    在处理大矩阵和大量操作时,解法二的性能优势更为明显。 总结来说,这道题目考察了对二维矩阵的高效操作以及如何优化算法减少计算量。在实际编程中,我们经常需要面对类似的优化问题,尤其是在处理大数据时,如何...

    leetcode 力扣 440 字典序的第K小数字 题解 算法题.docx

    - `getNodes`函数用于计算以`cur`为根的子树中所有节点的数目,其核心是通过比较`cur`和`cur+1`来确定当前层可以容纳的节点数量,然后递归地计算下一层的节点数。 - 在JavaScript解法中,使用了`next - cur`来计算...

    71、1279:【例9.23】橱窗布置(flower)-2020.02.08(a).pdf

    本文件内容是一个关于算法编程的例题及其解法,涉及的主题包括动态规划(Dynamic Programming,DP)算法、数组的初始化与使用,以及C++标准库函数memset()的用法。具体知识点可以分为以下几个方面: 1. **问题描述...

    usaco心得及总结

    - **状态转移**: `f[k][i] = min{f[k-1][i], f[k-1][i-j*s[k]] + j}`,其中 `j` 是选择使用第 `k` 件物品的数目。 **Money(多重背包问题)** - **问题**: 构成特定背包的不同方案总数。 - **方法**: 将一般的多重...

    学习常用算法之(4)递推法

    学习常用算法之递推法 递推法是一种常用的算法,用于解决某个特定问题。它是一组有限个规则,提供了解决问题的运算序列。在计算机科学中,递推法是一种重要的算法思想,它可以帮助我们解决复杂的问题。 递推法的...

    破解技术类面试秘密(pdf电子书)

    6. **计数与组合数学**:这一部分涉及到如何计算特定条件下的组合数目,是算法面试中常见的类型之一。 7. **数据库**:覆盖了SQL基础知识以及数据库设计原则等内容,这对于后端开发者尤为重要。 8. **现有代码...

    算法笔记.pdf

    算法是计算机科学的核心概念之一,它是一套明确的指令,用来解决特定的问题或者执行特定的任务。算法必须具备四个基本特征:输入、输出、确定性和有限性。具体来说,算法需要从外部获得输入,执行后需要产生输出结果...

    MSC.MARC操作手册

    **MARC (MARC Analysis Research Corporation)** 是一款由美国曼科分析研究公司开发的高性能非线性有限元分析软件。它始创于1967年,是世界上第一家专注于非线性有限元分析的软件公司。MARC以其强大的非线性分析能力...

    SCCA.rar_scca_tsp_visual c

    这个问题在计算机科学和运筹学中具有重要地位,因为它是一个NP完全问题,没有已知的多项式时间解法。 SCCA算法是基于覆盖的概念设计的,它的主要思想是逐步构建解决方案,每次选择一个能够最大化当前未覆盖节点数目...

    基于Matlab的精馏塔模拟计算.pdf

    由于MESH方程组是非线性的,并且变量数目庞大,方程组通常表现为稀疏矩阵形式,因此选用省时省力的迭代解法是必要的。 传统上,精馏过程的稳态模拟方法主要包括逐板计算法、矩阵法和不稳定方程法。其中,矩阵法由于...

    matlab数学建模算法全收录

    图解法是线性规划问题求解的基本原理之一,它通过在二维或三维坐标系中绘制约束条件的图形来直观地找到最优解。这种方法特别适用于变量个数较少的线性规划问题,但随着变量数目的增加,这种方法的实用性会大打折扣。...

Global site tag (gtag.js) - Google Analytics