day1 —— 拿捏1~n的求和问题

目录

前言

问题描述

代码解释


前言

1.若是想要了解基本语法的话,请到(7条消息) C语言从练气期到渡劫期_要一杯卡布奇诺的博客-CSDN博客查看相应的语法细节

2.若是想要自己保存文章的话,请到有道云笔记保存

问题描述

        求1+2+3+……+n的结果(1 <= n <= 10000

        问题链接:力扣

代码解释

        法一:循环遍历【O(n)】

思路分析:循环枚举数组中的每个值,定义求和变量,让这个变量加上数组中的每个值

#include <stdio.h>

int sumNums(int n) 
{
    int sum = 0;
    for(int i=1; i<=n; i++)
        sum += i;//累加
    return sum;
}

int main()
{
    int n = 0;
    scanf("%d", &n);
    printf("%d\n", sumNums(n));
    return 0;
}

        法二: 数学公式

思路分析:使用数学公式n*(n+1)/2,注意,直接使用可能会溢出,所以我们使用long long来定义sum

#include <stdio.h>

int sumNums(int n)
{
    long long sum = n * (n + 1) / 2;
    return sum;
}

int main()
{
    int n = 0;
    scanf("%d", &n);
    printf("%d\n", sumNums(n));
    return 0;
}

        法三:递归

思路分析:递归,每次递归得到当前数和对下一个数的递归的和,到0的时候递归结束

#include <stdio.h>

int sumNums(int n)
{
    //递归结束条件
    if (n < 1)
        return 0;
    return n + sumNums(n - 1);
}

int main()
{
    int n = 0;
    scanf("%d", &n);
    printf("%d\n", sumNums(n));
    return 0;
}

        法四:数学公式(在不使用long long的情况下)

思路分析:

        1)n为奇数 ----> (n + 1) / 2 * n;

        2)n为偶数 ----> n / 2 * (n + 1);

#include <stdio.h>

int sumNums(int n)
{
    int sum = 0;
    if (n % 2)
        sum = (n + 1) / 2 * n;//奇数情况
    else
        sum = n / 2 * (n + 1);//偶数情况
    return sum;
}

int main()
{
    int n = 0;
    scanf("%d", &n);
    printf("%d\n", sumNums(n));
    return 0;
}

        法五:库函数pow联合位运算

思路分析:本质上还是数学公式:(n^2 + n)/2;使用pow函数求出n^2,然后+n后右移1位【使用pow需要头文件math.h】

#include <stdio.h>
#include <math.h>

int sumNums(int n)
{
    return ((int)pow(n, 2) + n) >> 1;
}

int main()
{
    int n = 0;
    scanf("%d", &n);
    printf("%d\n", sumNums(n));
    return 0;
}

        法六:短路逻辑运算和递归搭配使用

思路分析:x && y --> x为假,y不执行;x || y --> x为真,y不执行。了解了短路运算符后,我们就可以使用它和递归搭配使用了

#include <stdio.h>

int sumNums(int n)
{
    n && (n += sumNums(n - 1));
    return n;
}

int main()
{
    int n = 0;
    scanf("%d", &n);
    printf("%d\n", sumNums(n));
    return 0;
}

        !!恭喜你完成第一天的修仙之旅!!

猜你喜欢

转载自blog.csdn.net/qq_63200557/article/details/129610868