附原题传送门P1009 [NOIP1998 普及组] 阶乘之和
题解:如果是我刚接触编程语言的时候看到这个题目的时候会无视题干中高精度这个关键词,然后可能会觉得这是一个非常简单的题目,上来就是定义一个长整型的变量来接收阶乘的和,然后高兴的提交期待屏幕面前的几个绿色的acepct,但想象是美好的,现实是残酷的编译过程中就可能看到[Warning] integer constant is too large for its type。言归正传,这题从数据范围来看n最大可能是50,50的阶乘的结果是30414093201713378043612608166064768844377641568960512000000000000,很明显int 或者long int 是没有办法来接收这么大的一个值。(int的范围为**-2147483648~2147483647**,long interesting的范围为**-9223372036854775808-9223372036854775807**)。所以很明显这个题是一个高精度问题,可以用整数数组来分别存储个、十、百、千…各个位置上的数字。然后再模拟乘法和加法,就可以避免了数值溢出的问题。废话不多数直接上代码。
#include <iostream>
int n,a[101],b[101];
//阶乘
void jc(int num){
//模拟乘法
int g=