Я думаю, вы переводите этот ответ .
Вы должны быть осторожнее с вашими индексами и диапазонами петель; например, вы перевели
for(int i = len; i > 0; --i) {
int x = 10 * A[i-1] + q*i;
A[i-1] = x % (2*i - 1);
q = x / (2*i - 1);
}
в
for i in reverse 1..length loop
x:=10*a(i) + q*i;
a(i):= x mod (2*i-1);
q:= x/(2*i-1);
end loop;
Диапазоны петель одинаковы. Но в строке seocnd код C использует A[i-1]
, а ваш - a(i)
; аналогично в третьей строке.
Позже, для
for (int k = 0; k < nines; ++k) {
printf("%d", 0);
}
у вас есть
for k in 0..nines loop
put("0");
end loop;
, в котором цикл C работает от 0
до nines - 1
, а ваш - от 0
до nines
. Таким образом, вы производите на 0
больше, чем должны (а позже и на 1026 * с).
Кроме того, вы должны использовать put (predigit, width=> 0)
.