前言
在c/c++中,计算a的n次方,常使用pow(a,n),但是这个函数出来的结果不是整数,且每次遇到都要重复计算,浪费时间,此处使用快捷方式。
方法
先定义一个幂数组,利用循环,存储其n次方的值,后面可以持续使用该数组进行计算。
代码示例
using namespace std;
#include<iostream>
#include<algorithm>
#include<cmath>
long long p[100001];
int main(){
int T;//T组数据
cin>>T;
for(int t=1;t<=T;t++){
int n;//集合中含有n个元素
cin>>n;
int *set = new int[n];
for(int i=0;i<n;i++)cin>>set[i];
p[0]=1;
//线性时间计算幂数组
for(int i=1;i<n;i++){
p[i]=p[i-1]*2%1000000007;
}
//排序,本题按照非递减 序列输入,无需排序
//sort(set,set+n,compare);
long long sum=0;
//对每个set[i],算出+set[i]出现的个数,算出-set[i]出现的个数
//+ 2**i, - 2**(n-i-1)次
for(int i=0;i<n;i++){
sum= (sum+set[i]*p[i]%1000000007-set[i]*p[n-i-1]%1000000007+1000000007)%1000000007;
}
cout<<"Case #"<<t<<": "<<sum<<endl;
}
}