Помогите перевести код из 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, всё совпало, потому буду считать, что написал правильно.
В следующий раз приводите хотя бы само условие задачи, ибо лично я так и не понял, что писал.