1

Тема: Сума степенів

1 тест не проходить через неправильну відповідь.

#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;

int main()
{
    int T = 0, l, h, k;
    cin >> l >> h >> k;
    while (l >= 0)
    {
        ++T;
        double S = 0;
        int e;
        for (int i = l; i <= h; ++i)
        {
            e = floor(k*log10((double)h));
            S += pow(10, k*log10((double)i)-e);
        }
        while (S >= 1) {S /= 10; ++e;}
        cout << "Case ";
        cout << setfill('0') << setw(4) << T << ": ";
        if (S)
        {
            cout << fixed << setprecision(6) << S << 'e';
            cout << setfill('0') << setw(10) << e << endl;
        }
        else cout << "0.000000e0000000001" << endl;
        cin >> l >> h >> k;
    }
    return 0;
}

http://www.e-olymp.com/uk/solutions/2095631

2

Re: Сума степенів

Добре. Сподіваюся, ви це виправите.

Подякували: BarsicPlus1

3 Востаннє редагувалося YurkoFlisk (06.08.2015 13:21:52)

Re: Сума степенів

Вся проблема тут в неточності типів з плаваючою комою і різною їх обробкою в різних компіляторах. Я відправив розв'язок на e-olymp під Judge C++, і він не проходить 7-й тест. А під Gnu C++ 4.7.1 - пройшло всі тести. Це, мабуть, тому, що еталонна програма, яка робила відповіді на тести, була скомпільована саме цим компілятором. А ще - цей же розв'язок з long double на Judge C++ не проходить останні 4 тести, на Gnu C++ 4.7.1 - все нормально. Думаю, в умовах таких задач мало би бути вказано, який тип з плаваючою комою використовувати для обчислень.
P.S. Рядок 17 у вашому розв'язку краще винести за межі циклу for

Подякували: mshcherba, leofun012

4

Re: Сума степенів

UPD: Тести вже виправили, тепер і на Judge C++ працює

5 Востаннє редагувалося ktretyak (26.08.2015 22:50:45)

Re: Сума степенів

А ще кажуть, що не буде клієнтів для платних питань... =)

Хоча вже неактуально задавати питання для автора теми, але б хотілось: чи готовий він заплатити від 20 до 100 грн. для вирішення своєї проблеми.