牛客网刷题 | BC79 小乐乐求和

发布于:2024-05-08 ⋅ 阅读:(26) ⋅ 点赞:(0)

目前主要分为三个专栏,后续还会添加:

        专栏如下:                 C语言刷题解析       C语言系列文章       我的成长经历

感谢阅读!

初来乍到,如有错误请指出,感谢!


描述

小乐乐最近接触了求和符号Σ,他想计算

的结果。但是小乐乐很笨,请你帮助他解答。

输入描述:

输入一个正整数n  (1 ≤ n ≤ 109)

输出描述:

输出一个值,为求和结果。


思路 : 

这题要先看懂要求的是什么

我就看错了

我看成要求阶乘了

想了半天没想出来

结果是要求一个数字加起来的和

读取输入:使用 scanf 函数读取用户输入的正整数 𝑛n。

计算求和:使用等差数列求和公式计算从 1 到 𝑛n 的整数和。

处理潜在的整数溢出:由于 𝑛n 可能非常大,我们使用 unsigned long long 类型来存储求和结果。

输出结果:使用 printf 函数输出计算得到的求和结果。

 


代码 1 :

# include <stdio.h>
int main ()

{
    long int n = 0;//数字很大的时候会溢出,所以把int改为长整型保证不会溢出
    long int sum =0;
    scanf("%ld",&n);
    for (int i = 0; i<=n; i++) 
    {
        sum+=i;//sum=sum+i
    }
    printf("%ld",sum);
    return 0;
}

代码 2 :

// 总和太大,注意用长整型
long long sum(unsigned n)
{
    if(n<=1) // 注意给条件防止死循环,当n<=1时,开始层层往上返回结果
    {
        return 1;
    }
    return n + sum(n-1);// 递归实现
}

int main()
{
    int n = 0;
    scanf("%d", &n);
    printf("%lld\n", sum(n)); 

    return 0;
}

代码 3 :

AI给出的代码

#include <stdio.h>

int main() {
    unsigned long long n, sum;

    // 读取输入的正整数 n
    scanf("%llu", &n);

    // 计算求和结果,注意使用 unsigned long long 避免溢出
    sum = n * (n + 1) / 2;

    // 输出求和结果
    printf("%llu\n", sum);

    return 0;
}

这段代码首先包含了 stdio.h 头文件,以便使用 scanfprintf 函数。然后在 main 函数中,定义了两个 unsigned long long 类型的变量 nsum 分别用于存储输入的数值和求和结果。使用 scanf 读取输入的 n,然后计算 sum 并使用 printf 输出结果。

注意:在C语言中,unsigned long long 类型的大小至少是 64 位,能够存储的数值范围远远大于 int 类型,这有助于处理大数的求和问题。同时,由于我们使用的是整数除法,所以不需要担心小数点后的部分。


知识点:

输入输出函数

scanf:用于从标准输入读取数据,常用于读取用户输入的值。

printf:用于向标准输出打印格式化的字符串。

数据类型

unsigned long long:一种基本数据类型,用于存储大整数,其范围比 int 类型大,适合处理大数求和的问题。

算术运算符

*(乘法):用于计算两个数的乘积。

/(除法):用于计算两个数的商。

变量声明和初始化:在C语言中,使用变量之前需要声明其数据类型。

控制流程

main 函数:C语言程序的入口点,所有程序的执行都从这里开始。

函数返回值

return:在 main 函数中使用,用于结束程序并返回一个状态值给操作系统。通常返回 0 表示程序正常结束。

格式化输出

%llu:在 printf 函数中,用于格式化输出 unsigned long long 类型的数值。

整数溢出:在处理大整数时,需要注意整数溢出的问题,选择合适的数据类型以避免这种情况。

函数原型:在C语言中,使用到的库函数(如 scanfprintf)需要包含相应的头文件。

头文件包含

#include <stdio.h>:包含了标准输入输出函数的声明,是进行输入输出操作时必须包含的头文件。