写一个java类,求1 加到100的总和。

面试时遇到一个面试题:请写一个java类,求1 加到100的总和

我写的是
for循环
但面试官说不行,我想问一下最优解是什么

直接用数学公式啊
总和=n * (n+1)/2。这里n等于100
如果扩展到求一个连续值之和,假设起始数为n,结束数为m,那么:
总和 = n * (m-n+1) + (m-n) * (m-n+1) / 2

该回答引用ChatGPT
对于这个问题,最简单的解决方法是使用等差数列求和公式,该公式可以用于计算从1加到n的总和,其中n为正整数。

公式为:S = (n/2) * (a1 + an),其中S表示总和,n表示项数,a1表示第一项,an表示最后一项。

将题目中的范围限定在1到100,我们可以把公式中的n设为100,a1设为1,an设为100,带入公式得到:

S = (100/2) * (1 + 100) = 5050

因此,最优的解决方法是直接使用等差数列求和公式,而不是使用for循环进行累加。这种方法的时间复杂度为O(1),比使用for循环的时间复杂度O(n)更优。

以下答案引用自GPT-3大模型,请合理使用:

最优解是使用数学公式求和:
S = (N*(N+1))/2; 

其中N为1100的总和,也就是100。

因此实现代码如下:
public class SumTest {
 public static void main(String[] args){
  long sum = 0;
  long N=100;
  sum=(N*(N+1))/2;
  System.out.println(sum);
  }
 }

如果我的回答解决了您的问题,请采纳我的回答

等差数列前n项和 首项加末项 乘以项数 再除以2

1. 递归,虽然会层层嵌套,但很直观,也显得你很有技术
2. 使用数学,先求出等差数列公式,代入值求解即可。

你这个for循环直接从1加到100,这个编程的思想是面向过程的啊,面试官是叫你写一个类,什么是类呀?兄弟
这个问题不是考你会不会写1到100的加法,而且考你面向对象的编程思想,怎么样封装一个可以计算任何区间的数相加的一个类,你应该做的是起码封装一个函数,函数有三个参数,最大值,最小值,以及间隔(即等差数列的差值),这样的话,不管是求1-100的和,还是2-2000的和都可以调用这一个函数就能完成,这才是面向对象呀,兄弟

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^