- 浏览: 143320 次
- 性别:
- 来自: 01
文章分类
最新评论
-
kingj:
将if(node.RightTree==null||node. ...
在二元树中找出和为某一值的所有路径 -
kingj:
非递归的算法在下面这种情况下会有问题 ...
在二元树中找出和为某一值的所有路径 -
houxinbin:
DateUtil.getTimestampFromGregor ...
使用JFreeChart显示 Java 虚拟机中的空闲内存量 -
坏小子46110:
我在build comm.js的时候有个这个异常 不知道怎么解 ...
使用Java实现登陆WebQQ(带源码) -
to_zoe_yang:
公子_小王 写道怎么下载不下来呢? 估计TX现在肯定改接口了都 ...
使用Java实现登陆WebQQ(带源码)
问题描述:
n! means n (n 1) ... 3 2 1
For example, 10! = 10 9 ... 3 2 1 = 3628800,
and the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.
Find the sum of the digits in the number 100!
Java中可以使用BigDecimal
不过也可以使用自己实现的大数算法~
结果:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 6 8 6 1 9 0 1 2 5 8 1 1 5 2 8 5 7 3 2 2 7 2 8 0 2 9 7 9 6 3 5 2 6 8 2 8 1 5 6 5 1 6 7 9 3 6 4 1 4 9 8 0 6 5 1 9 9 2 2 3 9 9 9 9 5 7 1 2 5 9 8 3 6 9 2 9 5 8 6 4 1 2 6 1 8 3 4 6 2 8 6 9 5 1 7 0 9 4 0 0 7 6 6 2 6 5 8 8 3 2 9 9 6 1 8 6 2 5 1 4 4 9 3 4 4 5 1 2 6 2 3 3 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
648
16
最后的16是执行的时间毫秒级别
因为每次都会产生无用的0,而且越来越多,导致进行无效的计算很多次
算法还可以改进~
具体的算法
n! means n (n 1) ... 3 2 1
For example, 10! = 10 9 ... 3 2 1 = 3628800,
and the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.
Find the sum of the digits in the number 100!
Java中可以使用BigDecimal
不过也可以使用自己实现的大数算法~
结果:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 6 8 6 1 9 0 1 2 5 8 1 1 5 2 8 5 7 3 2 2 7 2 8 0 2 9 7 9 6 3 5 2 6 8 2 8 1 5 6 5 1 6 7 9 3 6 4 1 4 9 8 0 6 5 1 9 9 2 2 3 9 9 9 9 5 7 1 2 5 9 8 3 6 9 2 9 5 8 6 4 1 2 6 1 8 3 4 6 2 8 6 9 5 1 7 0 9 4 0 0 7 6 6 2 6 5 8 8 3 2 9 9 6 1 8 6 2 5 1 4 4 9 3 4 4 5 1 2 6 2 3 3 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
648
16
最后的16是执行的时间毫秒级别
因为每次都会产生无用的0,而且越来越多,导致进行无效的计算很多次
算法还可以改进~
具体的算法
public static Byte[] StringToByte(String number){ int len = number.length(); Byte[] result = new Byte[len]; //从高位到低位依次转换,转换后字符串"1234"变为4321,这样方便以后计算 for(int i=0; i<number.length(); i++){ byte curByte = Integer.valueOf(number.charAt(i)+"").byteValue(); result[len-i-1] = curByte; } return result; } public static Byte[] Add(Byte[] number1, Byte[] number2){ int len = (number1.length>number2.length) ? number1.length : number2.length; Byte[] result = new Byte[len+1]; Integer sum = new Integer(0); Integer carry = new Integer(0); int i; if(number1.length>number2.length){ for(i=0; i<number2.length; i++){ sum = number1[i].intValue() + number2[i].intValue(); sum = sum +carry; carry = ((sum -10)>=0) ? 1:0; sum = ((sum -10)>=0) ? (sum-10):sum; result[i] = sum.byteValue(); sum = 0; } for(;i<number1.length;i++){ sum = number1[i] +carry; carry = ((sum -10)>=0) ? 1:0; sum = ((sum -10)>=0) ? (sum-10):sum; result[i] = sum.byteValue(); sum = 0; } if(carry!=0){ result[i] = carry.byteValue(); }else{ result[i] = 0; } }else{ for(i=0; i<number1.length; i++){ sum = number1[i].intValue() + number2[i].intValue(); sum = sum +carry; carry = ((sum -10)>=0) ? 1:0; sum = ((sum -10)>=0) ? (sum-10):sum; result[i] = sum.byteValue(); sum = 0; } for(;i<number2.length;i++){ sum = number2[i].intValue() + carry; carry = ((sum -10)>=0) ? 1:0; sum = ((sum -10)>=0) ? (sum-10):sum; result[i] = sum.byteValue(); sum = 0; } if(carry!=0){ result[i] = carry.byteValue(); }else{ result[i] = 0; } } return result; } //level表示左移次数 public static Byte[] left_shift(Byte[] number, int level){ Byte[] result = new Byte[number.length+level]; Integer zero = 0; for(int i=0; i<level; i++){ result[i] = zero.byteValue(); } for(int i=0; i<number.length; i++){ result[i+level] = number[i]; } return result; } //乘法计算过程中被乘数总是与成数的一位相乘 public static Byte[] MultiplyOne(Byte[] number1, Byte number2){ Byte[] result = new Byte[number1.length+1]; Integer cur = 0; Integer carry = 0; Integer zero = 0; int i; Arrays.fill(result, zero.byteValue()); for(i=0; i<number1.length; i++){ cur = number1[i].intValue()*number2.byteValue(); cur = cur +carry; carry = cur/10; cur = cur%10; result[i] = cur.byteValue(); cur = 0; } if(carry==0){ result[i] = cur.byteValue(); }else{ result[i] = carry.byteValue(); } return result; } public static Byte[] Multiply(Byte[] number1, Byte[] number2){ Byte[] result = new Byte[number1.length+1]; Byte[] before = new Byte[number1.length]; Integer zero = 0; Arrays.fill(before, zero.byteValue()); for(int i=0; i<number2.length; i++){ result = MultiplyOne(number1, number2[i]); result = left_shift(result, i); result = Add(result, before); before = result; } return result ; } public static void print(Byte[] result){ for(int i=0; i<result.length; i++){ System.out.print(result[i]+" "); } System.out.println(); }
public static void main(String[] args){ Integer one = 1; Byte[] result = new Byte[1]; result[0] = one.byteValue(); long t1 = System.currentTimeMillis(); for(Integer i=2; i<=100; i++){ Byte[] cur = BigNumber.BigNumber.StringToByte(i+""); result = BigNumber.BigNumber.Multiply(result, cur); } int sum = 0; for(int i=0; i<result.length; i++){ sum += result[i].intValue(); } long t2 = System.currentTimeMillis(); BigNumber.BigNumber.print(result); System.out.println(sum); System.out.println((t2-t1)); }
发表评论
-
Problem 52
2011-09-07 19:37 880问题描述: It can be seen that th ... -
Problem 51
2011-09-06 19:46 966问题描述: By replacing the ... -
Problem 50
2011-09-03 14:53 921问题描述: The prime 41, can b ... -
Problem 49
2011-08-28 15:34 918问题描述: The arithmetic seq ... -
Problem 47
2011-08-27 16:10 546问题描述: The first two co ... -
Problem 46
2011-08-26 18:08 583问题描述: It was proposed by Chr ... -
Problem 45
2011-08-25 18:24 953问题描述: Triangle, pentagona ... -
Problem43
2011-08-24 16:32 893问题描述: The number, 1406357289 ... -
Problem 42
2011-08-23 09:18 858问题描述: The nth term of the se ... -
Problem 41
2011-08-19 15:08 717问题描述: We shall say that an n ... -
Problem 40
2011-08-18 14:27 784算法描述: An irrational decimal ... -
Problem 39
2011-08-17 15:28 870问题描述: If p is the perimeter ... -
Problem 38
2011-08-17 15:27 761问题描述: Take the number 192 an ... -
Problem 37
2011-08-17 15:26 756问题描述: The number 3797 has an ... -
Problem 36
2011-08-17 15:23 817问题描述: The decimal number, 58 ... -
Problem 35
2011-08-17 15:22 723问题描述: The number, 197, is ca ... -
Problem 34
2011-08-17 15:20 796问题描述: 145 is a curious numbe ... -
Problem 33
2011-08-17 15:18 767问题描述: The fraction 49/98 is ... -
Problem 32
2011-08-17 15:17 894问题描述: We shall say that an n ... -
Problem 30
2011-08-17 15:11 496问题描述: Surprisingly there ...
相关推荐
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...
20. 实体完整性:设置外键(Problem 20) 设置外键是一种实现实体完整性的方法。 21. 删除视图:DROP VIEW 语句(Problem 21) DROP VIEW 语句用于删除一个视图。 22. 修改表结构:ALTER TABLE 语句(Problem 22...
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
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 ...
美赛20年C题可能涉及的主题广泛,可能是自然科学、社会科学、工程或经济学等领域的实际问题。题目通常会给出一些背景信息,并提出一个开放性的问题,要求参赛团队运用数学模型来解决。在这个压缩包中,"Problem_C_...
- **编译Java程序**: 第20页提到编译过程,这是Java程序开发中的基础步骤,涉及到将源代码转换成可执行文件。 - **编写算法**: 在第25页提到了算法的概念,算法是解决问题的精确步骤,编程的核心就是将算法转化为...
有效的括号"可能会被命名为"有效括号.py"或"problem20.py"。 基于以上信息,我们可以推测这个压缩包可能包含以下知识点: 1. **基础数据结构**:如数组、链表、栈、队列、树(二叉树、平衡树)、图等,这些都是...
20 20 22 根据题目描述,我们可以采用数据结构如并查集或者二维四向链接来处理矩形的合并与周长计算。首先,我们需要记录每个矩形的信息,然后根据矩形的覆盖情况更新黑色区域的周长。每次增加一个矩形时,需要检查...
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 深度探索 #### 问题背景与定义 在计算机科学与算法竞赛领域,特别是ACM比赛中,经常会出现一类与数学紧密结合的问题,其中“Prime Ring Problem”(简称PRP)就是一个典型例子。该问题的...
20. **一个讲英语的国家** - an English-speaking country 而在Unit 3 Travel Journal中,我们接触了旅行和日记相关的词汇: 1. **梦想做某事** - dream of doing something 2. **毕业于〔某大学〕** - graduate ...
在Project Euler的问题集中,问题5要求我们找到能被1至20所有数字整除的最小正整数。这个问题实际上是在寻找这组数字的最小公倍数(LCM)。对于较小的参数值,如本例中的k=20,可以不借助编程手段直接计算出结果。...
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)是一个经典的问题,旨在从一个...
第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1,N。 Output 对输入的每组数据M和N,用一行输出相应的K。 Sample Input 1 7 3 Sample Output 8