题目描述
给出一个长度为 n 的数组,第 i 个数为 ai。
为了调整这个数组,需要将第 k 个数改变为 −ak。
请你求出调整后的数组中所有数的和。
输入格式
输入共两行。
输入的第一行为两个整数 n,k。
输入的第二行为 n 个整数,第 i 个为 ai。
输出格式
输出一行一个整数,代表调整后的数组中所有数的和。
输入输出样例
输入 #1
10 7 1 2 3 4 5 6 7 8 9 10
输出 #1
41
输入 #2
5 2 1 999 4 3 2
输出 #2
-989
输入 #3
10 2 1 0 1 1 1 1 1 1 1 1
输出 #3
9
说明/提示
输入输出样例 1 解释
调整后的数组为 1 2 3 4 5 6 -7 8 9 10
,和为 41。
输入输出样例 2 解释
调整后的数组为 1 -999 4 3 2
,和为 -989。
数据规模与约定
对于 5% 的数据,为输入输出样例 1。
对于另外 40% 的数据,需要调整位置上的数 ak=0。
对于另外 20% 的数据,k=1。
对于 100% 的数据,1 ≤ k ≤ n , n ≤ 10^6, 0 ≤ ai ≤ 10^9。
---------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------
#include <iostream>
using namespace std;
long long A[1000000] = { 0 };
int main()
{
int i, n, k;
long long a, sum;
cin >> n >> k;
for (i = 0; i < n; i++)
{
cin >> a;
A[i] = a; //给数组赋值
}
A[k - 1] = -A[k - 1]; //调整数组,注意第k个数在数组中是k-1
for (i = sum = 0; i < n; i++)
sum = sum + A[i]; //数组求和
cout << sum << endl;
return 0;
}
_____________________________________________________________________________
此题最细节的地方其实是定义变量——0 =< ai <= 10^9
须知:int = long
取值范围-2147483648到2147483647
这是刚满足ai的最大值10^9的,可是数组求和之后的sum就很大可能超出范围了
所以此题AC的关键就是要将sum定义为long long 型
long long型取值范围:-9223372036854775808到9223372036854775808(数量级为10^18)