C语言OJ项目参考(1034) 求值

(1034) 求值
Description
求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字。
Input
n
Output

Sample Input
5
Sample Output
153
参考解答

#include <stdio.h>
int main ( )
{
    int n, i;
    long fact=1, sum=1;
    scanf("%d",&n);
    for(i=2;i<=n;i++)
    {
        fact=fact*i;
        sum+=fact;
    }
    printf("%ld", sum);
    return 0;
}

  本题中未指定n的大小。实际上,当n≥13时,n!就已经超过int型数据的取值范围而溢出。所以,本题中,将fact、sum定义为long型,以解决溢出问题。
  目前在32位的系统中,long型与int都占4个字节。结果是,n≥13时,即使fact、sum定义为long型,溢出在所难免。我在编这道程序时,在我的机器上测试,int型的结果与long型的结果一致。
  神奇的是,在OJ平台上,fact、sum定义为int型为错,当它们为long型时却对了。因为,代码被提交到了服务器,服务器是64位的,long型为8个字节。
  另外,下面的程序是最保险的:

#include <stdio.h>
int main ( )
{
    int n, i;
    long long int fact=1, sum=1;
    scanf("%d",&n);
    for(i=2;i<=n;i++)
    {
        fact=fact*i;
        sum+=fact;
    }
    printf("%lld", sum);
    return 0;
}

  这里,将fact、sum定义为long long int型,即使32位系统,当n≥13时,变可以得到正确的解答,这时,输出结果时,格式控制该用%lld。不过,在32位系统上安装的CodeBlocks会给我们出来2个warning,不要理会即是。

时间: 2024-11-05 18:55:10

C语言OJ项目参考(1034) 求值的相关文章

C语言OJ项目参考(2399)求倒数和

(2399)求倒数和 Description 输入一个小于10的正整数n,求1到n的倒数和(即1+1/2+-+1/n)并输出. Input 一个整型数 n Output 1+1/2+-+1/n 的值,小数点后保留6位小数. Sample Input 4 Sample Output 2.083333 参考解答 #include <stdio.h> int main ( ) { int n, i; double sum=0; scanf("%d",&n); for(i=

C语言OJ项目参考(2405)牛顿迭代法求根

2405: 牛顿迭代法求根 Description 用牛顿迭代法求根.方程为ax3+bx2+cx+d=0.系数a,b,c,d的值一次为1,2,3,4,由主函数输入.求x在1附近的一个实根.求出根后由主函数输出.结果保留两位小数. Input 系数a,b,c,d的值 Output x在1附近的一个实根 Sample Input 1 2 3 4 Sample Output -1.65 HINT 主函数已给定如下,提交时不需要包含下述主函数 /* C代码 */ int main() { double

C语言OJ项目参考(1056)输出已交换后的两个值

1056: (用宏)输出已交换后的两个值 Description 定义一个带参的宏(或者模板函数),带有三个参数,第一个参数为类型,后两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参.输出已交换后的两个值. Input 两个短整型数,空格隔开 两个小数,空格隔开 两个长整数,空格隔开 Outputt 交换后的两个数,空格隔开 Sample Input 1 2 1.5 2.5 65535 2147483647 Sample Outputt 2 1 2.5 1.5 2147483647 6

C语言OJ项目参考(2681)求三角形面积

(2681)求三角形面积 Description 输入三条边的长度,如果这三条边能构成三角形,则需要计算三角形面积,如果不能构成三角形则输出提示信息 "error input".输出的面积按两位小数方式输出 Input 三条边的长度 Output 如果这三条边能构成三角形,则输出该三角形面积,如果这三条边不能构成三角形,则输出提示信息"error input" Sample Input 3.3 4.4 5.5 Sample Output area=7.26 [参考解

C语言OJ项目参考(1030)求奖金总数

(1030)求奖金总数 Description 企业发放的奖金根据利润提成.利润低于或等于100000元的,奖金可提10%; 利润高于100000元,低于200000元(100000<I≤200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成 7.5%; 200000<I≤400000时,低于200000元部分仍按上述办法提成,(下同),高于200000元的部分按5%提成: 400000<I≤600000元时,高于400000元的部分按3%提成:6000

C语言OJ项目参考(2013)一元二次方程Ⅱ

(2013)一元二次方程Ⅱ Description 求一元二次方程ax 2 +bx+c=0 的解.a,b,c为任意实数. Input 输入数据有一行,包括a b c的值. Output 按以下格式输出方程的根x1和x2.x1和x2之间有一个空格. x1 x2 (1)如果x1和x2为实根,则以x1>=x2输出. (2)如果方程是共轭复根,x1=m+ni,x2=m-ni,其中n>0. 其中x1, x2, m,n均保留2位小数. Sample Input 1 2 3 Sample Output -1

C语言OJ项目参考(1047) 最大公约数和最小公倍数

1047: 求两个整数的最大公约数和最小公倍数 Description 写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入. Input 两个数 Output 最大公约数 最小公倍数 Sample Input 6 15 Sample Output 3 30 HINT 主函数已给定如下,提交时不需要包含下述主函数 /* C代码 */ int main() { int n,m,gys,gbs; int gcd(int a, int b); int

C语言OJ项目参考(1992)分数序列

(1992)分数序列 Description 有一个分数序列:2/1, 3/2, 5/3, 8/5, 13/8, -编写程序求出这个序列的前n项之和. Input 输入只有一个正整数n,1≤n≤10. Output 输出该序列前n项和,结果保留小数后6位. Sample Input 3 Sample Output 5.166667 参考解答 #include <stdio.h> int main ( ) { int m1=2,m2=1, n, t, i; double sum=2; scanf

C语言OJ项目参考(2962) 日期妙算星座

2962: 日期妙算星座 Description 近几年星座运势十分流行,据说一年之中根据月份可以分出十二个星座,它们分别是:摩羯座(12.21-1.19),水瓶座(1.20-2.18),双鱼座(2.19-3.20),白羊座(3.21-4.19),金牛座(4.20-5.20),双子座(5.21-6.21),巨蟹座(6.22-7.22),狮子座(7.23-8.22),处女座(8.23-9.22),天秤座(9.23-10.23),天蝎座(10.24-11.22),射手座(11.23-12.21),猴