Помогите перевести код из Pascal на С++

Необходимо перевести код из Pascal на C++

uses math;
function f(n:longint):longint;
begin
    if n=0 then f:=1
    else f:=f(n div 10)*(n mod 10)
end;



var n,m,p:longint;
begin
readln(n);
m:=f(n);
p := 1;


if n > 9 then
    repeat
        while n mod 10 < 9 do
            n:=n-1;

        n:=n div 10;
        p:=p*9;
        m:=max(m,f(n)*p);
    until n<10;
write(max(m,n*p));
end.

Ответы (1 шт):

Автор решения: Dafter

Хотя этот вопрос и не соответствует требованиям площадки, но мне скучно, потому я быстренько набросал код:

#define LL long long

#include <iostream>

LL f(LL n) {
    if (n == 0) return 1;
    else return f(n / 10) * (n % 10);
}

LL max(LL a, LL b) {
    return a > b ? a : b;
}

int main() {
    LL n, m, p = 1;
    std::cin >> n;
    m = f(n);
    if (n > 9)
        do {
            while (n % 10 != 9) n -= 1;
            n /= 10;
            p *= 9;
            m = max(m, f(n) * p);
        } while (n >= 10);
    std::cout << max(m, n * p) << std::endl;
    return 0;
}

За паскаль вообще не шарю, когда сравнивал работу кода, обнаружил, что в паскале как-то странно работают циклы while (ну или я дурачок), потому чуток поменял условия.

Сравнил работу моего кода и вашего с единицы и до 100000, всё совпало, потому буду считать, что написал правильно.

В следующий раз приводите хотя бы само условие задачи, ибо лично я так и не понял, что писал.

→ Ссылка