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

(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,不要理会即是。

目录
相关文章
|
25天前
|
算法 C语言 C++
【C语言实战项目】三子棋游戏
【C语言实战项目】三子棋游戏
30 1
|
25天前
|
程序员 C语言
【C语言实战项目】猜数字游戏
【C语言实战项目】猜数字游戏
27 0
【C语言实战项目】猜数字游戏
|
3月前
|
C语言
C语言Oj题判断素数几种方式详解
输入一个数判断它是不是素数,并且不是的情况把它打印出来不是素数。
|
7月前
|
存储 Unix 编译器
初始C语言(6)——详细讲解表达式求值以及其易错点
初始C语言(6)——详细讲解表达式求值以及其易错点
|
24天前
|
程序员 C语言
【C语言实战项目】通讯录(动态增容版)
【C语言实战项目】通讯录(动态增容版)
19 0
|
25天前
|
编译器 定位技术 C语言
【C语言实战项目】扫雷游戏
【C语言实战项目】扫雷游戏
26 0
|
6月前
|
存储 C语言 C++
C语言---数据结构实验---数制转换---表达式求值---回文判断---二叉树创建遍历
C语言---数据结构实验---数制转换---表达式求值---回文判断---二叉树创建遍历
|
2月前
|
存储 关系型数据库 MySQL
C语言/C++实战项目雷霆飞机(代码改进)
C语言/C++实战项目雷霆飞机(代码改进)
|
2月前
|
人工智能 C语言
C语言实战项目(AI代码)
C语言实战项目(AI代码)
|
2月前
|
存储 关系型数据库 MySQL
经典C语言/C++项目,雷霆战机
经典C语言/C++项目,雷霆战机