背景
Zhang Gangrui 年纪大了,记性不好,保险箱的密码记不住了,他只记得密码是一个数的阶乘各个位的数相加的和,最后还有个T或F,
代表这个数是否为素数,正好,你到他家去了,他请你帮他这个忙,并答应事成之后给你100000000 MOD 10 RMB。
描述
输入一个整数n(1000>=n>=0)
输出n的阶乘各个位的数相加的和y,最后再输出T或F,
代表y是否为素数。
格式
输入格式
输入一个整数n(1000>=n>=0)
输出格式
输出n的阶乘各个位的数相加的和y,最后再输出对y是否为素数的判断,
是为T否为F。
样例1
样例输入1:
10
样例输出1:
27F 借鉴了网上的高精度法求阶乘。 链接:http://blog.csdn.net/hackbuteer1/article/details/6708834 代码如下:#include "cstdio" #include "iostream" #include "cmath" #define MAX 1000 using namespace std; int main() { int n,i,j,k,sum=0,num[MAX]; int p=1,add; num[1] = 1; scanf("%d",&n); for(i=2;i<=n;++i) { for(j=1,add=0;j<=p;++j) { num[j] = num[j]*i + add; add = num[j]/10; num[j] = num[j] % 10; } while(add>0) { num[j] = add%10; add /= 10; ++j; } p = j - 1; } for(i=p;i>=1;--i) { sum += num[i]; } if(n==0||n==1)printf("1"); else printf("%d",sum); k = (int)sqrt(sum); for(i=2;i<=k;i++) { if(sum%i==0)break; } if(i>k)printf("T\n"); else printf("F\n"); return 0; }