LintCode #2 尾部的零
计算阶乘尾部的0的个数,初一看很简单。
先上代码
public static long GetFactorial(long n)
{
if (n == || n == )
return ; return n*GetFactorial(n - );
} //Main方法中调用 var result = GetFactorial(); int num = ;
int count = ;
while (true)
{
if (result % num == )
{
num = num * ;
count++;
}
else
{
break;
}
}
//count就是最终的结果
提交以后才发现问题,计算阶乘的数太大,会导致溢出。查了会资料,用数组存储数字,就不会有溢出的问题了。比如数字120, 存在数组里的结果是 a[0]=0, a[1]=2, a[2]=1
public static List<int> GetFactorial(int n)
{
List<int> r = new List<int>()
{ }; if (n == || n == )
return r; int num = ; for (int j = ; j <= n; j++)
{
for (int i = ; i < r.Count; i++)
{
var tmp = r[i] * j + num;
if (tmp > )
{
r[i] = tmp % ;
num = tmp / ;
}
else
{
r[i] = tmp;
num = ;
}
} if (num > )
{
r.Add(num);
num = ;
}
} return r;
} //Main方法中调用, count就是最终的结果
var list = GetFactorial(); int count = ;
for (int i = ; i < list.Count; i++)
{
if (list[i] == )
{
count++;
}
else
{
break;
}
}
计算105或者在大一点的数据的阶乘没有问题,不过在提交的时候有又情况了。
LintCode给出的测试数据是1001171717的阶乘,期望结果是250292920。提示错误为:Memory Limit Exceeded。一定是在用数组存储阶乘结果的时候,内存超限了。
运行了一下,想看看这个数的阶乘是多少,结果运行了好长时间还没有算完,还需要进行优化,考虑中...
LintCode #2 尾部的零的更多相关文章
- lintcode :Trailing Zeros 尾部的零
题目: 尾部的零 设计一个算法,计算出n阶乘中尾部零的个数 样例 11! = 39916800,因此应该返回 2 挑战 O(logN)的时间复杂度 解题: 常用方法: 也许你在编程之美中看到,通过求能 ...
- LintCode——尾部的零
尾部的零:设计一个算法,计算出n阶乘中尾部零的个数 样例:11! = 39916800.因此应该返回2 分析:假如你把1 × 2 ×3× 4 ×……×N中每一个因数分解质因数,例如 1 × 2 × 3 ...
- [LintCode] 尾部的零
class Solution { public: // param n : description of n // return: description of return long long tr ...
- [LintCode] Trailing Zeroes 末尾零的个数
Write an algorithm which computes the number of trailing zeros in n factorial. Have you met this que ...
- [LintCode] Move Zeroes 移动零
Given an array nums, write a function to move all 0's to the end of it while maintaining the relativ ...
- #4018. 统计n! 尾部零
题目出处: http://www.51cpc.com/problem/4018 题目描述 试统计正整数n的阶乘n!=1×2×3×…×n尾部连续零的个数. 输入格式 输入正整数n 输出格式 输出个数 样 ...
- Lintcode答案&笔记
1.A+B问题 给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符 思路:作异或得到未进位和,作与并向左移1位得到进位,随后再重复操作俩结果,直到进位为0,适合用递归 public in ...
- C++程序员面试题目总结(涉及C++基础、多线程多进程、网络编程、数据结构与算法)
说明:C++程序员面试题目总结(涉及C++基础知识.多线程多进程.TCP/IP网络编程.Linux操作.数据结构与算法) 内容来自作者看过的帖子或者看过的文章,个人整理自互联网,如有侵权,请联系作者 ...
- C Primer Plus(第五版)10
第 10 章 数组和指针 在本章中你将学习下列内容: · 关键字: static (静态) · 运算符: & * (一元) · 创建与初始化数组的方法. · 指针(基于已学的基础知识)及指针和 ...
随机推荐
- Redhat系统部署安装Splunk
一.下载安装包 可以从国内网站进入:http://10data.com/splunk/ 下载前需要注册一个splunk账号,注册后便可以提供下载,安装包名称:splunklight-6.5.1-f74 ...
- android alipay
"java.security.spec.InvalidKeySpecException" KeyFactory keyFactory =KeyFactory.getInstance ...
- Eclipse Alt+/ 智能提示失效
Eclipse3.7 自动提示Alt+/不能导入包,且General->Keys->content assist中已经检查并无快捷键冲突 Eclipse中window->Prefe ...
- Python解码base64遇到Incorrect padding错误
Python解码base64遇到Incorrect padding错误 base64转码过程 先说一下转换过程,详细的可以参考阮一峰.廖雪峰博客: 所谓Base64,就是说选出64个字符----小写字 ...
- openfire聊天记录插件
package com.sqj.openfire.chat.logs; import java.io.File; import java.util.Date; import java.util.Lis ...
- Oracle生成流水号函数
一.参考 1:日期范围上 smalldatetime的有效时间范围1900/1/1~2079/6/6 datetime的有效时间范围1753/1/1~9999/12/31 2:精准度上 smallda ...
- 【JavaScript】脚本
javascript: void((function() { var as = document.getElementsByTagName('a'); for (var i = 0, j = as.l ...
- 服务端测试环境hosts配置检查脚本
[本文出自天外归云的博客园] 问题 由于A测试环境和B测试环境相互耦合,B测试环境切换导致我方测试环境需要更改后台服务器的响应配置.若多台服务器中有一台服务器没有更改配置,则在测试过程中将会出现问题. ...
- Laravel Eloquent使用小记
原文地址:http://blog.onlywan.cc/14843810761202.html Laravel Eloquent使用小记 今天由于开发数据库业务中间层须要.開始研究Laravel El ...
- APMServ5.2.6 升级php5.2 到 5.3版本及Memcache升级!
一.如何选择PHP5.3的VC9版本和VC6版本 VC6是什么?VC6就是legacy Visual Studio 6 compiler,就是使用这个编译器编译的.VC9是什么?VC9就是the V ...