#include <algorithm>
#include <iostream>
#include <numeric>
#include <vector>
using namespace std;
const double percent = 5.023;
long double fn(const long double &one,const long double &two)
{
return ((one + two) / 100) * percent;
}
int main()
{
vector<long double> v;
for(int i=0;i<=10000;++i)
{
v.push_back(i);
}
sort(v.begin(),v.end());
partial_sum(v.begin(), v.end(), v.begin(),fn);
long double sum = std::accumulate(v.begin(), v.end(), 0);
cout<<sum<<endl; //2.63956e+06
return 0;
}
Как вариант Вашего алгоритма, только в 10 раз быстрее.
сортировать не нужно множество упорядочено.
#include <iostream>
#include <numeric>
#include <set>
#include <algorithm>
#include <iterator>
using namespace std;
const double percent = 5.023;
typedef long double ddouble;
typedef multiset<ddouble> DblSet;
int main() {
int size = 10;
ddouble *d = new ddouble[size];
for(int i=0;i<size;++i)
{
d[i]=i;
}
DblSet myset(d,d+size);
ostream_iterator<ddouble> output( cout, " ");
while(myset.size()!=1)
{
ddouble a = *myset.begin();
myset.erase(myset.begin());
ddouble b = *myset.begin();
myset.erase(myset.begin());
myset.insert(myset.begin(),((a+b)/100)*percent);
}
copy(myset.begin(),myset.end(),output);
delete d;
return 0;
}
у меня получилось для 200000 элементов 0.723 сек.
для 10 миллионов элементов 28 секунд.