`
水木清华77
  • 浏览: 37048 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Problem20

阅读更多
package com.yao.shuimu.euler;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by IntelliJ IDEA.
 * User: shuimuqinghua77
 * Date: 11-12-15
 * Time: 下午1:25
 */
public class Problem20 {

    public static void main(String[] args) throws Exception {

        byte[] result = digit(1);
        for (byte i = 1; i <= 100; i++) {
            result = multiply(digit(i), result);
        }

        int sum = 0;
        for (byte digit : result) {
            sum += digit;
        }
        System.out.println(sum);

    }

    private static byte[] multiply(byte[] multiplicand/**被乘数**/, byte[] multiplier) throws Exception {
        if (multiplicand.length == 0 || multiplier.length == 0) {
            throw new Exception("被乘数/乘数为空!!!");
        }
        if (multiplicand.length < multiplier.length) {
            byte[] temp = multiplier;
            multiplier = multiplicand;
            multiplicand = temp;
        }
        byte[] result = new byte[multiplicand.length + multiplier.length];
        for (int i = 0; i < multiplier.length; i++) {
            for (int j = 0; j < multiplicand.length; j++) {
                result[i + j] += (byte) (multiplier[i] * multiplicand[j]);
            }
            /**[29]->[9][2]进位**/
            carry(result, 1 + multiplicand.length, i);
        }
        if (result[result.length - 1] == 0) {
            byte[] resultDest = new byte[result.length - 1];
            System.arraycopy(result, 0, resultDest, 0, result.length - 1);
            return resultDest;
        }

        return result;
    }

    private static void carry(byte[] result, int length, int base) {
        for (int i = base; i < length + base; i++) {
            byte decade = (byte) (result[i] / 10);
            if (decade >= 1) {
                result[i + 1] += decade;
                result[i] = (byte) (result[i] % 10);
            }
        }

    }


    private static byte[] digit(int original) {
        List<Byte> list = new ArrayList<Byte>();
        do {
            list.add((byte) (original % 10));
            original = original / 10;
        }
        while (original > 0);
        byte[] digit = new byte[list.size()];
        for (int i = 0; i < list.size(); i++) {
            digit[i] = list.get(i);
        }
        return digit;
    }
}

分享到:
评论

相关推荐

    计算机网络第六版答案

    Computer Networking: A Top-Down Approach, 6th Edition Solutions to Review Questions and Problems Version Date: May 2012 ...This document contains the solutions to review questions ...Problem 1 There...

    MySQL数据库考试试题.docx

    20. 实体完整性:设置外键(Problem 20) 设置外键是一种实现实体完整性的方法。 21. 删除视图:DROP VIEW 语句(Problem 21) DROP VIEW 语句用于删除一个视图。 22. 修改表结构:ALTER TABLE 语句(Problem 22...

    Computer-Based.Problem.Solving.Process

    Title: Computer-Based Problem Solving Process ...Chapter 20. Timing Program Execution Chapter 21. Efficiency of Batch Operating Systems Chapter 22. Convenience of the BOS Chapter 23. Real-Time Systems

    Problem Solving with C++, 10th Global Edition

    10th edition edition (November 20, 2017) Language: English ISBN-10: 1292222824 ISBN-13: 9781292222820 For courses in C++ introductory programming. Learn the fundamentals of C++ programming with an ...

    Problem_C_Data.zip

    美赛20年C题可能涉及的主题广泛,可能是自然科学、社会科学、工程或经济学等领域的实际问题。题目通常会给出一些背景信息,并提出一个开放性的问题,要求参赛团队运用数学模型来解决。在这个压缩包中,"Problem_C_...

    Java An Introduction to Problem Solving and Programming

    - **编译Java程序**: 第20页提到编译过程,这是Java程序开发中的基础步骤,涉及到将源代码转换成可执行文件。 - **编写算法**: 在第25页提到了算法的概念,算法是解决问题的精确步骤,编程的核心就是将算法转化为...

    leet_leetcode_grownhcm_algorithm_

    有效的括号"可能会被命名为"有效括号.py"或"problem20.py"。 基于以上信息,我们可以推测这个压缩包可能包含以下知识点: 1. **基础数据结构**:如数组、链表、栈、队列、树(二叉树、平衡树)、图等,这些都是...

    Problem - 1001.pdf

    20 20 22 根据题目描述,我们可以采用数据结构如并查集或者二维四向链接来处理矩形的合并与周长计算。首先,我们需要记录每个矩形的信息,然后根据矩形的覆盖情况更新黑色区域的周长。每次增加一个矩形时,需要检查...

    英语必修一二基础词汇复习大全.pdf

    19. 解决问题:solve a problem 20. 一个讲英语的国家:an English-speaking country **Unit 3 Travel Journal** 1. 梦想做某事:dream of doing sth. 2. 毕业于(某大学):graduate from 3. 说服某人做某事:...

    Prime Ring Problem 深度探索

    ### Prime Ring Problem 深度探索 #### 问题背景与定义 在计算机科学与算法竞赛领域,特别是ACM比赛中,经常会出现一类与数学紧密结合的问题,其中“Prime Ring Problem”(简称PRP)就是一个典型例子。该问题的...

    英语必修一二基础词汇复习大全.doc

    20. **一个讲英语的国家** - an English-speaking country 而在Unit 3 Travel Journal中,我们接触了旅行和日记相关的词汇: 1. **梦想做某事** - dream of doing something 2. **毕业于〔某大学〕** - graduate ...

    project euler problem 5

    在Project Euler的问题集中,问题5要求我们找到能被1至20所有数字整除的最小正整数。这个问题实际上是在寻找这组数字的最小公倍数(LCM)。对于较小的参数值,如本例中的k=20,可以不借助编程手段直接计算出结果。...

    Problem Solving in Data Structures & Algorithms Using Java

    Title: Problem Solving in Data Structures & ...CHAPTER 20: BACKTRACKING AND BRANCH-AND-BOUND CHAPTER 21: COMPLEXITY THEORY AND NP COMPLETENESS CHAPTER 22: INTERVIEW STRATEGY CHAPTER 23: SYSTEM DESIGN

    子数组最大和 Maximal Contiguous Subsequent Sum Problem

    ### 子数组最大和问题(Maximal Contiguous Subsequent Sum Problem) #### 一、问题定义与背景 在计算机科学领域,子数组最大和问题(Maximal Contiguous Subsequent Sum Problem)是一个经典的问题,旨在从一个...

    Problem A:放苹果

    第一行是测试数据的数目t(0 &lt;= t &lt;= 20)。以下每行均包含二个整数M和N,以空格分开。1,N。 Output 对输入的每组数据M和N,用一行输出相应的K。 Sample Input 1 7 3 Sample Output 8

Global site tag (gtag.js) - Google Analytics