Java 求和

问题描述

给定 n 个整数 a1​,a2​,⋅⋅⋅,an​ ​ ,求它们两两相乘再相加的和,即:

S=a1​⋅a2​+a1​⋅a3​+⋯+a1​⋅an​+a2​⋅a3​+⋯+an−2​⋅an−1​+an−2​⋅an​+an−1​⋅an

输入格式输入的第一行包含一个整数 nn。

第二行包含 n 个整数 a1​,a2​,⋯,an​。

输出格式

输出一个整数 SS,表示所求的和。请使用合适的数据类型进行运算。

样例输入

4
1 3 6 9

样例输出

117

 题解

 用数学知识解,同时用long类型,防止超时和爆容量。

 假如有5个数:a0,a1,a2,a3,a4
求解:
//      sum0 = a0 + a1 + a2 + a3 + a4
//      用乘法分配律进行分组求和
//      sum1 = ( a1 + a2 + a3 + a4 ) * a0 = (sum0 - a0                ) * a0
//      sum2 = (      a2 + a3 + a4 ) * a1 = (sum0 - a0 - a1           ) * a1
//      sum3 = (           a3 + a4 ) * a2 = (sum0 - a0 - a1 - a2      ) * a2
//      sum4 = (                a4 ) * a3 = (sum0 - a0 - a1 - a2 - a3 ) * a3
//      res = sum1 + sum2 + sum3 + sum4

//可以看到非常的有规律
//我们求出数组的和(sum)后,在遍历求和时,依次减去当前索引所指的数,再与这个被减的数相乘
 */

 不确定可以用草稿简单计算一下

public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		// 接收第一个参数
		int n = scan.nextInt();
		//声明一个第一个参数长度数组
		long[] nums = new long[n];
		long sum = 0;
		long res = 0;
		for(int i = 0;i < n;i++) {
			//动态存入重控制台输入的参数
			nums[i] = scan.nextLong();
			sum += nums[i];
		}
		for(int i = 0;i < nums.length-1;i++) {
			sum -= nums[i];
			res += sum * nums[i];
			
		}
		System.out.println(res);
		
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值