В общем суть такая. Пытаюсь решить задачку на одном ресурсе
ссылка на условие в оригинале
На вводе имеется Float-число с четырьмя знаками после точки. Необходимо создать массив и вывести в консоль последовательно убывающую геометрическую прогрессию этого числа длинной в сто элементов. При этом каждое число должно отборажаться с также с четырьмя знаками после точки.
Пример ввода и вывода:
Ввод: 200.0000
Вывод:
N[0] = 200.0000
N[1] = 100.0000
N[2] = 50.0000
N[3] = 25.0000
N[4] = 12.5000
...бла бла и так до N[99]
Я если честно опробовал уже тучу разных вариантов , и всё равно при проверке получаю 5 процентов неверного вывода. Подозреваю , что проблема при неправильном округлении метода .toFixed(), но как её побороть ума не приложу .. помогите плс, может кто хорошо в этой теме шарит.
Вот несколько вариантов моих решений:
var input = require('fs').readFileSync('/dev/stdin', 'utf8');
var lines = input.split('\n');
let x = parseFloat(lines[0]).toFixed(4);
let N=[],i,temp=0;
N[0] = x;
console.log(`N[${0}] = ${x}`);
for (i = 1; i < 100; i++){
temp = (Math.floor((N[i-1])*10000)/10000);
N[i] = temp/2;
let string = String(Math.floor((N[i])*10000)/10000);
let float = parseFloat(string).toFixed(4);
console.log(`N[${i}] = ${float}`);
}
------
let x = parseFloat(lines[0]);
let N=[],i,temp=0;
console.log(`N[0] = ${x.toFixed(4)}`);
for (i=1; i<100; i++) {
N[i] = (x*10000/10000) / (Math.pow(2 ,i));
console.log(`N[${i}] = ${parseFloat(N[i]).toFixed(4)}`);
}
-----
let x = parseFloat(lines[0]);
let N=[];
N[0] = x;
for (let i=1; i<100; i++) {
N[i] = ((x*10000) / (Math.pow(2 ,i)) / 10000);
let temp = String(N[i].toFixed(5));
let compare = temp.substring(6);
if (compare === '5'&& temp>0.00005) {
N[i] = N[i].toFixed(4) - 0.0001;
}
}
for (let i=0; i<100; i++) {
console.log(`N[${i}] = ${(N[i].toFixed(4))}`);
}