一些前言
可以来这里观看:AcWing 84. 求1+2+…+n - AcWing
若你感觉这篇题解写得好请在AcWing 84. 求1+2+…+n - AcWing点赞,谢谢。
题目描述
不能用 运算,求 的值。
思路分析
step1
首先考虑能用 $+,-,\times,\div$ 运算如何得到最优解:
令 。
将 反过来:。
然后一位一位对应(1 与 n 相加,2 与 n-1 相加……)相加得到
。
也就是等差数列求和公式:(首相 + 末项) 公差 2。
利用公式,程序如下:
class Solution {
public:
int getSum(int n) {
return n*(n+1)/2;
}
};
### step2
考虑不能用 运算,求 的值。
将公式 拆成 ,
因为 2 $ 可以用 >>1 来计算,所以主要计算 的值。
我们知道:一个长 n$宽为 m$的二维矩阵的大小为 ,所以,只要定义一个长 n 宽 n+1 的二维矩阵,然后求它的大小,就是 。
class Solution {
public:
int getSum(int n) {
char a[n][n+1];
return sizeof(a)>>1;
}
};