Что не так в моем решении на С++
Недавно начал учить плюсы. Решаю задачу на степике и валить второй тест.
Задача звучит так:
Процентная ставка по вкладу составляет P процентов годовых, которые прибавляются к сумме вклада через год. Вклад составляет X рублей Y копеек. Определите размер вклада через K лет.
Формат входных данных
Программа получает на вход целые числа P, X, Y, K .
Формат выходных данных
Программа должна вывести два числа: величину вклада через K лет в рублях и копейках. Дробное число копеек по истечение года отбрасывается. Перерасчет суммы вклада (с отбрасыванием дробных частей копеек) происходит ежегодно.
Примечание
В этой задаче часто возникают проблемы с точностью. Если они возникли у вас - попробуйте решить задачу в целых числах.
Sample Input:
12
179
0
5
Sample Output:
315 43
Вот мое решение:
#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
int main(){
double p, x, y, k, s;
int i;
cin >> p >> x >> y >> k;
while (i < k ){
s = (x*100 + y) + (x*100 + y)*p*0.01;
x = s/100; // вся всумма в рублях
y = x - trunc(x); // отсаток в копейках
y = y * 100; //перевод в режим целого числа
y = y + 0.01;
y = floor(y); //обнуление остатка копеек в конце месяца
x = trunc(x); //убрали копейки через точку у рублей
i++;
}
cout << x << " " << y;
}
Я, не понял! Где мои 3 копейки?! За 5 лет должно быть 315 рублей 46 копеек!!!
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
int main() {
constexpr auto ten = 100.0;
double p, x, y, k;
cin >> p >> x >> y >> k;
const auto income = (x + y / ten);
const auto coefficient = p / ten;
const auto deposit = income * pow(1.0 + coefficient, k);
const auto rub = static_cast<int>(deposit);
const auto kop = static_cast<int>(ceil((deposit - rub) * ten));
cout << rub << ' ' << kop << '\n';
}
#include <iostream>
int main() {
int P, X, Y, K;
std::cin >> P >> X >> Y >> K;
int totalCents = X * 100 + Y; // переводим сумму вклада в копейки
int interest = P * totalCents / 100; // вычисляем проценты, округляя вниз
for (int i = 0; i < K; i++) {
totalCents += interest; // увеличиваем сумму вклада на проценты
interest = P * totalCents / 100; // вычисляем новые проценты
}
int rubles = totalCents / 100; // переводим общую сумму вклада в рубли
int cents = totalCents % 100; // оставшиеся копейки
std::cout << rubles << " " << cents << std::endl;
return 0;
}