C++基础20 for循环求积

循环求积

求1*2*3*... ...*10的积:

这个算式与求和十分类似,我们可以类比循环求和的代码,将”+”替换成”*”,即可得到循环求积的代码,即:

s = s*1;s = s*2; ... ... ;s = s*10;

用来求积的变量s的初始值要为1,这样才不会改变算式的运算结果。

循环对应的算式:s*1*2*3...*10。

注意:用来求积的变量最好是long long 类型,累乘运算很容易超出int 的范围。

 

训练:累乘求积

输入整数m,n(m,n<=15),求m*(m+1)*...*n的结果。

【输入格式】输入两个空格隔开的整数m,n(1<=m<=n<=15)

【输出格式】输出一个整数,表示求积的结果

【输入样例】1 3

【输出样例】6

 

解析

  1. 求m~n之间所有整数的乘积,即m*(m+1)*(m+2)*... ...*(n-1)*n,从m开始,每次加1,可循环(n-m+1)次,从m乘到n,即:for(int i=m;i<=n;i++)
  2. 用s来保存运算结果,即:s = s*i; //  可简写为s*=i;

 

参考代码

#include<iostream>
using namespace std;
int main( )
{
    long long s=1;
    int m,n;
    cin>>m>>n;
    for(int i=m;i<=n;i++)
    {
        s=s*i;
    }
    cout<<s;
    return 0;
}

 

阶乘

一个正整数的阶乘:是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!(数学表示)。

例如:

0! = 1;

1! = 1;

4! = 1*2*3*4;

 

训练:求阶乘

输入整数n(n<=15),求n!。

【输入格式】输入一个整数n(1<=n<=15)

【输出格式】输出一个整数,表示n!

【样例输入】4

【样例输出】24

 

解析

  1. 求n的阶乘,相当于1*2*3*...*n,从1乘到n,每次乘一个数,则循环n次,即:for(int i=1;i<=n;i++)
  2. 循环体内用s来保存结果,即:s = s*i;

 

参考代码

#include<iostream>
using namespace std;
int main()
{
    long long s=1;
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        s=s*i;
    }
    cout<<s;
    return 0;
}

 

训练: 求阶乘的和

输入整数n,求1!+2!+3!...+n!的和。

【输入格式】输入一个整数n(1<=n<=15)

【输出格式】输出一个整数,表示求和的结果

【样例输入】3

【样例输出】9

 

解析

1.求i的阶乘,从i等于1开始计算i的阶乘,当i等于1时计算1的阶乘,当i=2时计算2的阶乘... ...当i等于n时求n的阶乘,即:

for(int i=1;i<=n;i++)
{
    jc=jc*i;
}

2.我们要求的是阶乘的和,求完阶乘,还要将当前i的阶乘累加到变量s中,即:

for(int i=1;i<=n;i++)
{
    jc=jc*i;
    s=s+jc;
}

 

参考代码

#include<iostream>
using namespace std;
int main( ){
    long long s=0,jc=1;
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        jc=jc*i;
        s=s+jc;
    }
    cout<<s;
    return 0;
}