阶乘求和之最后一位
时限: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; }