阶乘求和之最后一位

时限:200ms 内存限制:10000K  总时限:1000ms

描述: 给一个n,则有1!+2!+3!+…+n!,那么该和的最后一位+n是多少呢?

         如 1!+2!+3!=9,9+3 = 12.因此当n=3时,输出12

输入: 一个正整数n (0<n < 10^1000)

输出: 一个整数 

输入样例: 3

输出样例: 12

#include<stdio.h>
#include<string.h>
int last_factorial(int n)
{
   if(n==1)
	   return 1;
   else
       return (n*last_factorial(n-1))%10;
}
int main()
{ 
	int sum=0,last,kk;
	char num[100000]={0};
	gets(num);
	if(strlen(num)>=2)  kk=9;
	else 	 kk=num[0]-48;
        for(int i=1;i<=kk;i++)     
	         sum+=last_factorial(i);   
	//printf("%d\n",sum);//9
        //printf("%d\n",strlen(num));//1
        last=sum%10;//9
	     int temp=last;
        for(i=strlen(num)-1;i>=0;i--)
	{       if(temp+num[i]-48>10)
		{	num[i]=temp+num[i]-10;
			temp=1;
		}
		else
		{   num[i]=temp+num[i];
		    temp=0;
			break;
		}
	}
	if(i==-1  &&temp==1)
		printf("1");
	printf("%s\n",num);
        return 0;
}

 

 

 

posted on 2012-07-08 16:05  IThinktan  阅读(681)  评论(0编辑  收藏  举报

导航