目录
法五(使用C++的max_element函数,涉及到数组指针)
1041 : 数列求和2
题目描述
输入一个整数n,输出数列1-1/3+1/5-……前n项的和。
输入
输入只有一个整数n。
输出
结果保留2为小数,单独占一行。
样例输入
3
样例输出
0.87
注意sum += 1相当于sum=sum+1
注意sum *= 1相当于sum=sum*1
C语言版
#include<stdio.h> // 包含标准输入输出库
#include<math.h> // 包含数学库(虽然在这个程序中没有用到数学库的功能)
int main() // 主函数
{
int n, i; // 定义两个整型变量n和i,用于存储用户输入的项数和循环计数
double sum = 0, mid = -1; // 定义两个双精度浮点型变量sum和mid,分别用于存储数列和和交替符号的项
scanf("%d", &n); // 从用户输入中读取一个整数,存储到变量n中
// 计算数列和
for (i = 1; i <= n; i++) // 从1到n循环
{
mid *= -1.0; // 交替符号
sum += mid / (2 * i - 1); // 计算当前项并加到sum上
}
printf("%.2f\n", sum); // 输出数列和,保留两位小数
return 0; // 程序正常结束
}
C++版
#include<iostream> // 包含标准输入输出流库
#include<iomanip> // 包含输入输出流格式化库
using namespace std; // 使用标准命名空间std
int main() // 主函数
{
int n, i; // 定义两个整型变量n和i,用于存储用户输入的项数和循环计数
double sum = 0, mid = -1; // 定义两个双精度浮点型变量sum和mid,分别用于存储数列和和交替符号的项
cin >> n; // 从标准输入读取一个整数,存储到变量n中
// 计算数列和
for (i = 1; i <= n; i++) // 从1到n循环
{
mid *= -1.0; // 交替符号
sum += mid / (2 * i - 1); // 计算当前项并加到sum上
}
cout << setprecision(2) << fixed << sum << endl; // 使用setprecision(2)和fixed设置小数精度为2位,并输出数列和
return 0; // 程序正常结束
}
1042 : 数列求和3
题目描述
求1-2/3+3/5-4/7+5/9-6/11+...的前n项和,结果保留3位小数。
输入
输入正整数n(n>0)。
输出
输出一个实数,保留3位小数,单独占一行。
样例输入
5
样例输出
0.917
C语言版
#include<stdio.h> // 包含标准输入输出库
int main() // 主函数
{
int n, i; // 定义两个整型变量n和i,用于存储用户输入的项数和循环计数
double sum = 0, mid = -1; // 定义两个双精度浮点型变量sum和mid,分别用于存储数列和和交替符号的项
scanf("%d", &n); // 从用户输入中读取一个整数,存储到变量n中
// 计算数列和
for (i = 1; i <= n; i++) // 从1到n循环
{
mid *= -1.0; // 交替符号
sum += mid * i / (2 * i - 1); // 计算当前项并加到sum上
}
printf("%.3f\n", sum); // 输出数列和,保留三位小数
return 0; // 程序正常结束
}
C++版
#include<iostream> // 包含标准输入输出流库
#include<iomanip> // 包含输入输出流格式化库
using namespace std; // 使用标准命名空间std
int main() // 主函数
{
int n, i; // 定义两个整型变量n和i,用于存储用户输入的项数和循环计数
double sum = 0, mid = -1; // 定义两个双精度浮点型变量sum和mid,分别用于存储数列和和交替符号的项
cin >> n; // 从标准输入读取一个整数,存储到变量n中
// 计算数列和
for (i = 1; i <= n; i++) // 从1到n循环
{
mid *= -1.0; // 交替符号
sum += mid * i / (2 * i - 1); // 计算当前项并加到sum上
}
cout << setprecision(3) << fixed << sum << endl; // 使用setprecision(3)和fixed设置小数精度为3位,并输出数列和
return 0; // 程序正常结束
}
1043 : 最大值
题目描述
输入一个整数n和n个整数,输出这n个整数的最大值。
输入
输入有两行:第一行是一个正整数n,第二行是n个整数。
输出
输出包含一个整数,即n个数中的最大值,单独占一行。
样例输入
4 3 7 5 6
样例输出
7
注意设立变长数组,必须在输入n之后
法一
C语言版
#include<stdio.h> // 包含标准输入输出库
int main() {
int n, i; // 定义变量n用于存储数组大小,i用于循环控制
scanf("%d", &n); // 从输入中读取数组的大小n
int arr[n]; // 定义一个动态数组,大小由用户输入决定
// 从用户输入中读取数组的每个元素
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]); // 逐个读取输入的整数,存储到数组arr中
}
// 初始化最大值变量为数组的第一个元素
int max = arr[0];
// 遍历数组,寻找最大值
for (i = 1; i < n; i++) {
if (arr[i] > max) { // 如果当前元素大于当前最大值
max = arr[i]; // 更新最大值
}
}
// 输出最大值
printf("%d\n", max);
return 0; // 程序正常结束
}
C++版
#include<iostream> // 包含C++标准输入输出流库
using namespace std; // 使用标准命名空间
int main() {
int n, i; // 定义变量n用于存储数组大小,i用于循环控制
cin >> n; // 从标准输入读取数组的大小n
int arr[n]; // 定义一个变长数组,大小由输入决定
// 从用户输入中读取数组的每个元素
for (i = 0; i < n; i++) {
cin>>arr[i]; // 使用cin逐个读取输入的整数,存储到数组arr中
}
// 初始化最大值变量为数组的第一个元素
int max = arr[0];
// 遍历数组,寻找最大值
for (i = 1; i < n; i++) {
if (arr[i] > max) { // 如果当前元素大于当前最大值
max = arr[i]; // 更新最大值
}
}
// 输出最大值
cout << max << endl;
return 0; // 程序正常结束
}
法二(与法一没太大区别)
C语言版
#include<stdio.h> // 包含标准输入输出头文件
int main() {
int n, i, max; // 定义变量:n表示数组大小,i用于循环控制,max用于存储最大值
// 读取数组大小n和数组的第一个元素(初始化最大值)
scanf("%d%d", &n, &max);
int arr[n]; // 定义一个动态数组,大小由用户输入决定
// 从数组的第二个元素开始读取(因为第一个元素已经读取并赋值给max)
for (i = 1; i < n; i++) {
scanf("%d", &arr[i]); // 读取数组的第i个元素
if (arr[i] > max) { // 如果当前元素大于当前最大值
max = arr[i]; // 更新最大值
}
}
// 输出最大值
printf("%d\n", max);
return 0; // 程序正常结束
}
C++版
#include<iostream> // 包含C++标准输入输出流库
using namespace std; // 使用标准命名空间,避免重复书写std::
int main() {
int n, i, max; // 定义变量:n表示数组大小,i用于循环控制,max用于存储最大值
// 从标准输入读取数组的大小n和数组的第一个元素(初始化最大值)
cin >> n >> max;
int arr[n]; // 定义一个动态数组,大小由由输入决定(C++中不推荐使用VLA,但这里为了与C语言兼容)
// 从数组的第二个元素开始读取(因为第一个元素已经读取并赋值给max)
for (i = 1; i < n; i++) {
cin >> arr[i]; // 读取数组的第i个元素
if (arr[i] > max) { // 如果当前元素大于当前最大值
max = arr[i]; // 更新最大值
}
}
// 输出最大值
cout << max << endl;
return 0; // 程序正常结束
}
法三 (排序思想)
C语言版
#include<stdio.h> // 包含标准输入输出头文件
int main() {
int n, i; // 定义变量:n表示数组大小,i用于循环控制
// 从输入中读取数组的大小n
scanf("%d", &n);
int arr[n]; // 定义一个变长数组(VLA),大小由输入决定
// 从输入中读取数组的每个元素
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]); // 逐个读取输入的整数,存储到数组arr中
}
// 使用冒泡排序的思想,将数列最大值转移到最后一个元素
for (i = 0; i < n-1; i++) {
if (arr[i] > arr[i+1]) { // 如果当前元素大于下一个元素
int mid = arr[i]; // 交换两个元素的位置
arr[i] = arr[i+1];
arr[i+1] = mid;
}
}
// 输出最大值(位于数组的最后一个位置)
printf("%d\n", arr[n-1]);
return 0; // 程序正常结束
}
C++版(可使用容器vector替换数组)
#include<iostream> // 包含C++标准输入输出流库
using namespace std;
int main() {
int n, i; // 定义变量:n表示数组大小,i用于循环控制
// 从标准输入读取数组的大小n
cin >> n;
int arr[n]; // 定义一个变长数组,大小由输入决定
// 从标准输入读取数组的每个元素
for (i = 0; i < n; i++) {
cin >> arr[i]; // 逐个读取输入的整数,存储到数组arr中
}
// 使用冒泡排序的思想,将数列最大值转移到最后一个元素
for (i = 0; i < n - 1; i++) {
if (arr[i] > arr[i + 1]) { // 如果当前元素大于下一个元素
int mid = arr[i]; // 交换两个元素的位置
arr[i] = arr[i + 1];
arr[i + 1] = mid;
}
}
// 输出最大值(位于数组的最后一个位置)
cout << arr[n - 1] << endl;
return 0; // 程序正常结束
}
法四(使用C++的nth_element函数)
了解nth_element函数:nth_element函数——C++快速选择函数-优快云博客
#include<iostream> // 包含标准输入输出流库
#include<algorithm> // 包含算法库,用于使用 nth_element
using namespace std; // 使用标准命名空间
int main()
{
int n, i; // 定义变量 n 和 i,分别用于存储数组大小和循环索引
cin >> n; // 输入数组的大小
int arr[n]; // 定义一个动态数组,存储 n 个整数(C++11之前 不推荐这样定义动态数组)
for(i = 0; i < n; i++) // 循环输入数组的每个元素
{
cin >> arr[i]; // 输入数组元素
}
nth_element(arr, arr + n - 1, arr + n); // 调用 nth_element,将第 n 小的元素(即最大值)放到第n个位置(对应下标为n-1)
cout << arr[n - 1] << endl; // 输出第 n 小的元素(即数组中的最大值)
return 0; // 程序结束
}
下面这个代码逻辑运算是对的,但在oj上过不了
#include<iostream> // 包含标准输入输出流库
#include<algorithm> // 包含算法库,用于使用 nth_element
using namespace std; // 使用标准命名空间
int main()
{
int n, i; // 定义变量 n 和 i,分别用于存储数组大小和循环索引
cin >> n; // 输入数组的大小
vector<int> arr(n); // 使用 vector 定义动态数组,存储 n 个整数
for(i = 0; i < n; i++) // 循环输入数组的每个元素
{
cin >> arr[i]; // 输入数组元素
}
nth_element(arr.begin(), arr.begin() + n - 1, arr.end()); // 调用 nth_element
// 这里的目的是找到数组中第 n 小的元素(即数组中的最大值)
// nth_element 会将第 n 小的元素放到 arr[n-1] 的位置上
// 并且保证 arr[n-1] 之前的元素都不大于 arr[n-1]
cout << arr[n - 1] << endl; // 输出第 n 小的元素(即数组中的最大值)
return 0; // 程序结束
}
法五(使用C++的max_element函数,涉及到数组指针)
max_element
函数会返回指向数组中最大元素的指针,然后通过解引用指针*a
来输出最大值。了解max_element函数:简要介绍C++中的 max 和 min 函数以及返回值-优快云博客
#include<iostream> // 包含标准输入输出流库
#include<algorithm> // 包含算法库,用于使用 max_element
using namespace std; // 使用标准命名空间
int main()
{
int n, i; // 定义变量 n 和 i,分别用于存储数组大小和循环索引
cin >> n; // 输入数组的大小
int arr[n]; // 定义一个动态数组,存储 n 个整数
for(i = 0; i < n; i++) // 循环输入数组的每个元素
{
cin >> arr[i]; // 输入数组元素
}
int* a = max_element(arr, arr + n); // 使用 max_element 找到数组中的最大值
// max_element 返回指向数组中最大元素的指针
cout << (*a) << endl; // 输出最大值
return 0; // 程序结束
}
1044 : 不及格率
题目描述
输入n和n个学生成绩(实数),输出不及格率。
输入
输入的第一行是一个整数n,第二行是n个实数,用空格隔开。
输出
输出一个实数,表示不及格率,结果保留2位小数,单独占一行。
样例输入
8
98 45 86 79 56 75 90 70样例输出
0.25
C语言版
#include <stdio.h> // 引入标准输入输出库
int main()
{
int n; // 定义一个整数变量,用于存储用户输入的学生人数
double grade, num = 0; // 定义一个双精度浮点数变量,用于存储不及格学生的数量,初始化为0
scanf("%d", &n); // 从标准输入读取一个整数n,表示学生人数
int mid = n; // 用mid变量保存n的值,用于计算比例
// 使用while循环读取每个学生的成绩
while (n--) // 循环n次,每次循环n减1
{
scanf("%lf", &grade); // 读取一个学生的成绩
if (grade < 60) // 如果成绩小于60分
{
num++; // 不及格学生数量加1
}
}
// 输出不及格学生的比例,保留两位小数
// num/mid计算不及格学生的比例
printf("%.2f", num / mid);
return 0; // 程序正常结束
}
C++版
#include <iostream> // 引入输入输出流库
using namespace std;
int main()
{
int n; // 定义一个整数变量,用于存储用户输入的学生人数
double grade, num = 0; // 定义一个双精度浮点数变量,用于存储不及格学生的数量,初始化为0
// 从标准输入读取一个整数n,表示学生人数
scanf("%d", &n);
int mid = n; // 用mid变量保存n的值,用于计算比例
// 使用while循环读取每个学生的成绩
while (n--) // 循环n次,每次循环n减1
{
// 读取一个学生的成绩
scanf("%lf", &grade);
// 如果成绩小于60分
if (grade < 60)
{
num++; // 不及格学生数量加1
}
}
// 输出不及格学生的比例,保留两位小数
// num/mid计算不及格学生的比例
printf("%.2f", num / mid);
return 0; // 程序正常结束
}
1045 : 数值统计
题目描述
统计给定的n个数中,负数、零和正数的个数。
输入
输入的第一个数是整数n(n<100),表示需要统计的数值的个数,然后是n个整数
输出
输出一行a,b和c,分别表示给定的数据中负数、零和正数的个数。
样例输入
6 0 1 2 3 -1 0
样例输入
1 2 3
C语言版
#include <stdio.h> // 引入标准输入输出库
int main()
{
int n; // 定义一个整数变量,用于存储用户输入的整数个数
int mid; // 定义一个整数变量,用于临时存储每次输入的整数
int small = 0, zero = 0, big = 0; // 定义三个计数器,分别用于统计负数、零和正数的数量
// 从标准输入读取一个整数n,表示接下来要输入的整数个数
scanf("%d", &n);
// 使用for循环读取n个整数
for (int i = 0; i < n; i++) // 循环n次
{
// 每次循环读取一个整数,存储到mid中
scanf("%d", &mid);
// 根据mid的值进行分类统计
if (mid < 0) // 如果mid是负数
{
small++; // 负数计数器加1
}
else if (mid == 0) // 如果mid是零
{
zero++; // 零计数器加1
}
else // 如果mid是正数
{
big++; // 正数计数器加1
}
}
// 输出统计结果:负数、零和正数的数量
printf("%d %d %d\n", small, zero, big);
return 0; // 程序正常结束
}
C++版
#include <iostream> // 引入输入输出流库
using namespace std;
int main()
{
int n; // 定义一个整数变量,用于存储用户输入的整数个数
int mid; // 定义一个整数变量,用于临时存储每次输入的整数
int small = 0, zero = 0, big = 0; // 定义三个计数器,分别用于统计负数、零和正数的数量
// 从标准输入读取一个整数n,表示接下来要输入的整数个数
scanf("%d", &n);
// 使用for循环读取n个整数
for (int i = 0; i < n; i++) // 循环n次
{
// 每次循环读取一个整数,存储到mid中
scanf("%d", &mid);
// 根据mid的值进行分类统计
if (mid < 0) // 如果mid是负数
{
small++; // 负数计数器加1
}
else if (mid == 0) // 如果mid是零
{
zero++; // 零计数器加1
}
else // 如果mid是正数
{
big++; // 正数计数器加1
}
}
// 输出统计结果:负数、零和正数的数量
printf("%d %d %d\n", small, zero, big);
return 0; // 程序正常结束
}
1046 : 奇数的乘积
题目描述
给你n个整数,求他们中所有奇数的乘积。
输入
第一个数为n,表示本组数据一共有n个,接着是n个整数,你可以假设每组数据必定至少存在一个奇数。
输出
输出n个数中的所有奇数的乘积,占一行。
样例输入
5 2 5 4 6 7
样例输出
35
C语言版
#include <stdio.h> // 引入标准输入输出库
typedef long long i64; // 定义一个长整型的别名
int main()
{
int n;
int mid; // 定义一个整数变量,用于临时存储每次输入的整数
i64 mul = 1; // 定义一个长整型变量,用于存储奇数的乘积,初始化为1
// 从标准输入读取一个整数n,表示接下来要输入的整数个数
scanf("%d", &n);
// 使用for循环读取n个整数
for (int i = 0; i < n; i++) // 循环n次
{
// 每次循环读取一个整数,存储到mid中
scanf("%d", &mid);
// 如果mid是奇数
if (mid % 2 == 1)
{
mul *= mid; // 将mid乘到mul中
}
}
// 输出奇数的乘积
printf("%lld\n", mul);
return 0; // 程序正常结束
}
C++版
#include <iostream> // 引入输入输出流库
using namespace std;
typedef long long i64; // 定义一个长整型的别名
int main()
{
int n; // 定义一个整数变量,用于存储用户输入的整数个数
int mid; // 定义一个整数变量,用于临时存储每次输入的整数
i64 mul = 1; // 定义一个长整型变量,用于存储奇数的乘积,初始化为1
// 从标准输入读取一个整数n,表示接下来要输入的整数个数
scanf("%d", &n);
// 使用for循环读取n个整数
for (int i = 0; i < n; i++) // 循环n次
{
// 每次循环读取一个整数,存储到mid中
scanf("%d", &mid);
// 如果mid是奇数
if (mid % 2 == 1)
{
mul *= mid; // 将mid乘到mul中
}
}
// 输出奇数的乘积
printf("%lld\n", mul);
return 0; // 程序正常结束
}
1047 : 对数表
题目描述
输入两个正整数m和n,输出m到n之间每个整数的以自然对数为底的对数。
输入
输入包括两个整数m和n(m<=n),之间用一个空格隔开。
输出
每行输出一个整数及其对数,整数占4列,对数占8列,对数保留4位小数。
样例输入
2 4
样例输出
2 0.6931 3 1.0986 4 1.3863
注意:“%4d%8.4f”,不要在中间加空格
C语言版
#include<stdio.h> // 包含标准输入输出头文件
#include<math.h> // 包含数学函数头文件,用于调用log函数
int main()
{
int m, n; // 定义两个整数变量m和n,用于存储用户输入的范围
scanf("%d%d", &m, &n); // 从标准输入读取两个整数m和n
// 使用for循环从m到n(包括m和n)逐个处理每个整数
for (int i = m; i <= n; i++)
{
// 输出当前整数i及其自然对数log(i)
// %4d表示以至少4个字符的宽度输出整数i
// %8.4f表示以至少8个字符的宽度输出浮点数log(i),并保留4位小数
printf("%4d%8.4f\n", i, log(i));
}
return 0; // 程序正常结束
}
C++版
#include<iostream> // 引入输入输出流库
#include<cmath> // 引入数学库,用于调用log函数
using namespace std;
int main()
{
int m, n; // 定义两个整数变量m和n,用于存储用户输入的范围
scanf("%d%d", &m, &n); // 从标准输入读取两个整数m和n
// 使用for循环从m到n(包括m和n)逐个处理每个整数
for (int i = m; i <= n; i++)
{
// 输出当前整数i及其自然对数log(i)
// %4d表示以至少4个字符的宽度输出整数i
// %8.4f表示以至少8个字符的宽度输出浮点数log(i),并保留4位小数
printf("%4d%8.4f\n", i, log(i));
}
return 0; // 程序正常结束
}
1048 : 阶乘表
题目描述
输入一个正整数n(n<20),输出1到n之间阶乘表。
输入
输入只有一个正整数n。
输出
输出1到n之间的阶乘表,格式见输出样例。每行两个数据,第一个数据占4列,第二个数据占20列,左对齐。
样例输入
5
样例输出
1 1 2 2 3 6 4 24 5 120
C语言版
#include <stdio.h> // 引入标准输入输出库
typedef long long i64; // 定义一个别名i64,表示long long类型
int main()
{
int n; // 定义一个整数变量,用于存储用户输入的整数n
i64 mid = 1; // 定义一个长整型变量,用于存储阶乘结果,初始化为1
// 从标准输入读取一个整数n,表示要计算的阶乘范围
scanf("%d", &n);
// 使用for循环从1到n逐个计算每个整数的阶乘
for (int i = 1; i <= n; i++)
{
// 输出当前整数i及其阶乘结果mid
// %-4d表示以至少4个字符的宽度左对齐输出整数i
// %-20lld表示以至少20个字符的宽度左对齐输出长整型变量mid
printf("%-4d%-20lld\n", i, mid);
// 计算下一个整数的阶乘
mid *= (i + 1);
}
return 0; // 程序正常结束
}
C++版
#include<iostream> // 引入输入输出流库
using namespace std;
typedef long long i64; // 定义一个别名i64,表示long long类型
int main()
{
int n; // 定义一个整数变量,用于存储用户输入的整数n
i64 mid = 1; // 定义一个长整型变量,用于存储阶乘结果,初始化为1
// 从标准输入读取一个整数n,表示要计算的阶乘范围
scanf("%d", &n);
// 使用for循环从1到n逐个计算每个整数的阶乘
for (int i = 1; i <= n; i++)
{
// 输出当前整数i及其阶乘结果mid
// %-4d表示以至少4个字符的宽度左对齐输出整数i
// %-20lld表示以至少20个字符的宽度左对齐输出长整型变量mid
printf("%-4d%-20lld\n", i, mid);
// 计算下一个整数的阶乘
mid *= (i + 1);
}
return 0; // 程序正常结束
}
1049 : 平方和与立方和
题目描述
给定两个整数m和n,求出m~n这段连续的整数中所有偶数的平方和以及所有奇数的立方和。
输入
由两个整数m和n组成,你可以假定m<=n.
输出
应包括两个整数x和y,分别表示该段连续的整数中所有偶数的平方和以及所有奇数的立方和。
你可以认为32位整数足以保存结果。样例输入
2 5
样例输出
20 152
C语言版
#include<stdio.h> // 引入标准输入输出库
typedef long long i64; // 定义一个别名i64,表示long long类型
int main()
{
int m, n; // 定义两个整数变量m和n,用于存储用户输入的范围
i64 sum1 = 0, sum2 = 0; // 定义两个长整型变量,分别用于存储偶数的平方和与奇数的立方和
// 从标准输入读取两个整数m和n
scanf("%d%d", &m, &n);
// 使用for循环从m到n逐个处理每个整数
for (int i = m; i <= n; i++)
{
// 判断当前整数i的奇偶性
if (i % 2 == 0) // 如果i是偶数
{
sum1 += (i64)i * i; // 计算i的平方并累加到sum1中
}
else // 如果i是奇数
{
sum2 += (i64)i * i * i; // 计算i的立方并累加到sum2中
}
}
// 输出偶数的平方和与奇数的立方和
printf("%lld %lld\n", sum1, sum2);
return 0; // 程序正常结束
}
C++版
#include <iostream> // 引入输入输出流库
using namespace std;
typedef long long i64; // 定义一个别名i64,表示long long类型
int main()
{
int m, n; // 定义两个整数变量m和n,用于存储用户输入的范围
i64 sum1 = 0, sum2 = 0; // 定义两个长整型变量,分别用于存储偶数的平方和与奇数的立方和
// 从标准输入读取两个整数m和n
scanf("%d%d", &m, &n);
// 使用for循环从m到n逐个处理每个整数
for (int i = m; i <= n; i++)
{
// 判断当前整数i的奇偶性
if (i % 2 == 0) // 如果i是偶数
{
sum1 += (i64)i * i; // 计算i的平方并累加到sum1中
}
else // 如果i是奇数
{
sum2 += (i64)i * i * i; // 计算i的立方并累加到sum2中
}
}
// 输出偶数的平方和与奇数的立方和
printf("%lld %lld\n", sum1, sum2);
return 0; // 程序正常结束
}
1050 : 阶乘的累加和
题目描述
求1! + 2! + ……n!
输入
输入一个整数n,你可以假定n不大于10。
输出
输出一个整数,即阶乘累加的结果,单独占一行。
样例输入
4
样例输出
33
C语言版
#include<stdio.h> // 引入标准输入输出库
typedef long long i64; // 定义一个别名i64,表示long long类型
int main()
{
int n;
int mid = 1; // 定义一个整数变量,用于存储当前的阶乘值,初始化为1
i64 sum = 0; // 定义一个长整型变量,用于存储阶乘之和,初始化为0
// 从标准输入读取一个整数n
scanf("%d", &n);
// 使用for循环从1到n逐个计算每个整数的阶乘,并累加到sum中
for (int i = 1; i <= n; i++)
{
sum += mid; // 将当前的阶乘值mid累加到sum中
mid *= (i + 1); // 计算下一个整数的阶乘值
}
// 输出阶乘之和
printf("%lld\n", sum);
return 0; // 程序正常结束
}
C++版
#include<iostream> // 引入输入输出流库
using namespace std;
typedef long long i64; // 定义一个别名i64,表示long long类型
int main()
{
int n;
int mid = 1; // 定义一个整数变量,用于存储当前的阶乘值,初始化为1
i64 sum = 0; // 定义一个长整型变量,用于存储阶乘之和,初始化为0
// 从标准输入读取一个整数n
scanf("%d", &n);
// 使用for循环从1到n逐个计算每个整数的阶乘,并累加到sum中
for (int i = 1; i <= n; i++)
{
sum += mid; // 将当前的阶乘值mid累加到sum中
mid *= (i + 1); // 计算下一个整数的阶乘值
}
// 输出阶乘之和
printf("%lld\n", sum);
return 0; // 程序正常结束
}