```cpp
#include <iostream>
int main() {
int n = 100 // 等差数列中的最后一项
int a1 = 1 // 等差数列中的第一项
int d = 1// 公差
int sum = (a1 + n) * n / 2 // 使用等差数列求和公式计算和
std::cout <<"从 1 加到 100 的和为:" <<sum <<std::endl
return 0
}
```
这个程序使用了等差数列求和公式来计算从 1 加到 100 的和:$S_n = \dfrac{(a_1 + a_n)n}{2}$,其中 $S_n$ 表示前 $n$ 项的和,$a_1$ 表示等差数列中的第一项,$a_n$ 表示等差数列中的最后一项,$n$ 表示等差数列中的项数。因为从 1 加到 100 的等差数列中,第一项 $a_1=1$,最后一项 $a_{100}=100$,项数 $n=100$,公差 $d=1$,因此可以直接套用该公式计算出总和。
注意,在 C++ 中,除法运算 `/` 默认会对整数进行截断,因此在计算和时需要将分子或分母至少转换成浮点数类型,避免结果被截断。在上面的代码中,分子 `(a1 + n)` 和分母 `2` 都是整数型变量,但相乘之后会自动转换成浮点数类型,从而得到正确的结果。
public class Test{
public void calSum()
{
long num = 9// 数列的各个项,后面会改变其值,使用 long, 因为 int 会超范围
long sum = num // 存放数列和,使用 long, 因为 int 会超范围
// 因为只到9999999999,所以只用 9 次
for (int i = 0i <9i++)
{
num = num * 10 + 9 // 根据数列当前项得到下一项的值
sum += num // 计算目前为止所有数的和
}
System.out.println("9+99+999+...+9999999999=" + sum)
}
public static void main(String[] argv)
{
Test test = new Test()
test.calSum()
}}
等差数列求和求和有两种方法,第一种是数值循环相加,第二种是利用公式:
Sn=n*a+n*(n-1)*d/2,其中a为数列首项
代码如下:
#include <stdio.h>
int main(void)
{
int a,m,d,sum
int s=0,n=1
do {
printf("清输入等差数列首项值a,项数m,数列差值d\n")
scanf("%d,%d,%d",&a,&m,&d)
}while(a<1||m<1||d<1)
while(n<=m)
{
s+=a+(n-1)*d
n++
}
sum=m*a+d*(m*(m-1))/2 //sum为通过公式,求等差数列的和
printf("s=%d\nsum=%d\n",s,sum) //s为通过数据循环相加得到的等差数列的和
return 0
}
上图是首项值为1,数列差值为分别1和2的情况下的求和结果,可以看出两种不同求和方式得到结果一致。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)