阶乘求和之最后一位
时限: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;
}
浙公网安备 33010602011771号