`
lgh1992314
  • 浏览: 325480 次
文章分类
社区版块
存档分类
最新评论

返回阶乘最后非零位

 
阅读更多
#include<iostream>
#include<string>
using namespace std;
const int MAXN=10005;
char str[MAXN];
int temp[MAXN];
int lastdigit(const char *str){ //返回阶乘最后非零位
	const int mod[20]={1,1,2,6,4,2,2,4,2,8,4,
		4,8,4,6,8,8,6,8,2};
	int len=strlen(str),i,c,ret=1;
	if(len==1)
		return mod[ str[0]-'0'];
	for(i=0;i<len;i++)
		temp[i]=str[len-1-i]-'0';
	for(; len ; len-= !temp[len-1]){
		ret= ret*mod[ temp[1]%2*10+temp[0] ]%5;
		for(c=0,i=len-1; i>=0; i--){
			c=c*10+temp[i];
			temp[i]=c/5;
			c%=5;
		}
	}
	return ret+ret%2*5;
}
int main(){
	while(scanf("%s",str)!=EOF){
		printf("%d\n",lastdigit(str));
	}
	return 0;
}
HDOJ1066
http://acm.hdu.edu.cn/showproblem.php?pid=1066
分享到:
评论

相关推荐

    n的阶乘c#

    这段代码初始化结果变量`result`为1,然后遍历从1到n的所有整数,将每个数乘以当前的`result`值,最后返回阶乘结果。 ### 使用递归实现n的阶乘 递归是一种函数调用自身的技术,通常用于解决具有自相似性质的问题。...

    java 求任意一个正数的阶乘

    在这里,`factorial`函数会递归地调用自身,直到`n`等于1或0,然后返回1。这同样能计算出`num`的阶乘值。 ### 注意事项 1. 阶乘的结果可能会非常大,所以使用`long`类型存储阶乘值,以避免溢出问题。对于更大的...

    易语言阶乘计算源码

    4. **函数定义**:源码可能定义了一个专门用于计算阶乘的函数,函数接收一个正整数作为参数,返回其阶乘值。 5. **错误处理**:在实际编程中,我们还需要考虑边界条件,例如输入为0或负数时,阶乘是未定义的,因此...

    阶乘求和源代码

    在这个例子中,`factorial`函数通过不断将当前数值乘以前一个较小数值的阶乘,直到n等于1或0时返回1(因为1的阶乘是1,这是递归的基本情况)。 理解递归函数的关键在于理解它的基本条件(base case)和递归步骤。在...

    微机原理与接口——计算N的阶乘

    首先,实验要求学生通过键盘输入一个16位的数值N,计算N的阶乘,结果需在显示器上显示。这个过程中,需要用到的关键知识点包括: 1. **堆栈传递参数的子程序调用**:在计算阶乘的过程中,可能需要调用子程序进行...

    1到n的阶乘求和

    这段代码逐个计算每个数的阶乘并累加,最后返回总和。需要注意的是,随着n的增大,阶乘增长非常快,很快就会超出普通数据类型的范围,导致溢出。因此,在实际应用中,对于大的n值,可能需要使用大数运算或者高精度库...

    递归法写阶乘

    **非递归方法**:也可以使用循环结构(如for循环)来计算阶乘,这种方式不会导致栈溢出,但可能不如递归直观。 #### 递归与迭代的对比 - **递归**:通常代码更简洁、逻辑更清晰;但可能效率较低,且可能导致栈溢出...

    阶乘计算器(delphi)

    `if N = 0`是递归的基本情况,当N为0时返回1,这是所有阶乘计算的基础。 接下来,我们需要编写一个主程序,接收用户输入的N值,并计算1!到N!的和。这可以通过一个简单的循环实现: ```delphi var N, Sum: Int64; ...

    C++ 求任意数的阶乘

    最后返回计算得到的阶乘值。 ### 2. 使用递归计算阶乘 **递归实现** 是一种更直观的表示方式,因为它直接反映了阶乘的定义。然而,递归方法可能会导致栈溢出,特别是当处理大数值时。下面是一个使用递归计算阶乘的...

    运用链表实现大数阶乘

    在实现过程中,还要注意边界条件的处理,比如负数的阶乘、非整数的阶乘以及防止溢出等问题。在链表中,溢出问题可以通过检查节点值是否超过允许的最大值以及链表长度是否超过预期来避免。 总的来说,运用链表实现...

    用java实现阶乘三种方法

    在这个例子中,我们初始化结果变量result为1,然后从1到n,每次循环都将i乘以当前的result,最后得到的就是n的阶乘。 **方法三:动态规划** 虽然递归和循环实现已经足够高效,但动态规划可以进一步优化内存使用,...

    n的阶乘高效率算法

    最后,返回`fact[n]`即为n的阶乘。 另一种提高效率的方法是利用递归和尾递归优化。在某些编程语言中(如Scheme、Haskell等),可以将递归函数优化为尾递归形式,这样即使在处理大数时也能保持高效。尾递归是指在...

    java阶乘应用小程序

    - 如果n等于1或0,返回1(因为0和1的阶乘都是1)。 - 否则,返回n乘以`factorial(n-1)`的结果。这是递归调用,因为它会继续调用自身直到n等于1为止。 ```java public static int factorial(int n) { if (n == ...

    输入数阶乘求和

    否则返回`n`与`n-1`的阶乘相乘的结果。递归的原理在于将问题分解为更小规模的问题,直到达到最简单的情况为止。 ##### 3. 求和算法 在计算完单个数的阶乘后,还需要计算从1至该数的所有阶乘的和。这部分功能由`sum...

    C语言阶乘源代码

    最后,使用`printf()`函数输出`a`及其阶乘的结果。 #### `sum()`函数 这是一个递归函数,用于计算阶乘。它接受一个整型参数`x`,返回一个长整型的阶乘结果。如果`x`小于0,函数会输出错误信息;如果`x`等于0或1,...

    用 VB 做的一个 《阶乘求和》

    递归部分是关键,当n等于0或1时,返回1(因为0!和1!都等于1),否则返回n乘以前一个较小的阶乘值。 现在,我们转向求和部分。为了计算阶乘求和,我们需要遍历一系列数字(通常从1开始),对每个数计算其阶乘,然后...

    VB 求n的阶乘

    然后通过`For`循环,将1到n的所有数字相乘,最后返回结果。 **2. 递归函数实现阶乘** 递归是一种函数调用自身的技术,通常用于解决具有自相似性质的问题。阶乘的定义就符合这种性质,因为n! = n * (n-1)!。下面是...

    阶乘算法实现

    这个函数通过一个for循环,从1到n,依次将每个数乘以当前结果,最后得到n的阶乘。 在处理大数据计算时,需要考虑阶乘结果可能会非常大,超出了普通整型数据类型的范围。对于这种情况,可以使用大数库(如Python的`...

    汇编语言求阶乘

    - **基本情况处理**:如果输入值为0,则返回1。 - **递归调用**:对输入值减一后再次调用自身,乘以前一个值。 #### 输入/输出操作 - **INT 21H**: 是一个常见的DOS系统调用中断,提供了多种功能。 - **AH=01H*...

    阶乘相加程序

    当n为1或0时,函数返回1(这是阶乘的基本情况),否则它会返回n乘以n减1的阶乘。 接下来,我们需要一个主函数`main`来调用`factorial`函数并计算两个数字的阶乘之和。假设我们要计算5和6的阶乘之和,我们可以这样做...

Global site tag (gtag.js) - Google Analytics