求1!+2!+3!+…+n!(2種方式)

目錄

  1. 整型
  2. 浮點型
一、整型

求1!+2!+3!+…+n!
求1!+2!+3!+…+20!

程序…………雙長整型…………

#include<stdio.h>          //當sum爲short時,  N最大可取8    -2^15 ~ (2^15-1)    -32768~32767
#define N 20               //當sum爲int整型時,N最大可取12   -2^31 ~ (2^31-1) 
int main()                 //當sum爲雙長型時, N最大可取20   -2^63 ~ (2^63-1) 
{
    long long int i,sum,term;
    sum=0,term=1;
    for(i=1;i<=N;i++)
    {
        term=term*i;
        sum=sum+term;
        printf("%4d!= %lld\n",i,term);   //此行可不要
    }
    printf("\n 1!+2!+…+%d! = %lld\n",N,sum);   // %lld 
    return 0; 
}

去掉for循環中

 printf("%4d!= %lld\n",i,term);   //此行可不要

運行結果1…………………………
在這裏插入圖片描述

#define N 20   //多用符號常量(尤其是複雜程序中)     

運行結果2…………………………
在這裏插入圖片描述

二、浮點型

求1!+2!+3!+…+n!
求1!+2!+3!+…+20!

程序……………double……………

#include<stdio.h>
#define N 20          //當s,t爲 float,N最大可取40     -1.2*10^-38 ~ 3.4*10^38 和0 (4字節) 
int main()            //當s,t爲 double,N最大可取160  -2.3*10^-308 ~ 1.7*10^308 和0  (8字節) 
{                     //當s,t爲 long double          -3.4*10^-4932 ~ 1.7*10^4932 和0   (16字節) 
    double s=0,t=1;
    int n;               //N=20時 long long型,float和double 結果都不一樣 
    for(n=1;n<=N;n++)                             //long long 結果最準確
    {
        t=t*n;
        s=s+t;
        printf("%4d!= %0.lf\n",n,t);   //此行可去掉
    }
    printf("\n1!+2!+3!+...+%d! = %0.lf\n",N,s); 
    return 0;
}

去掉

 printf("%4d!= %0.lf\n",n,t);   //此行可去掉

運行結果1…………………………

在這裏插入圖片描述
運行結果2…………………………
在這裏插入圖片描述

輸出不同形式數據:

#include<stdio.h>
#define N 20
int main()
{
    double s=0,t=1;
    int n;
    for(n=1;n<=N;n++)
    {
        t=t*n;       //累乘 
        s=s+t;       //累加 
    }
    printf("\n1!+2!+3!+...+%d! = %0.lf\n",N,s);
    printf("\n1!+2!+3!+...+%d! = %22.15e\n",N,s);
    printf("\n1!+2!+3!+...+%d! = %e\n",N,s);
    return 0;
}

運行結果……………………
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章