У меня есть математическое задание, которое я должен сделать в коде.
Я перепробовал все, о чем думал, но не смог найти решение.
Все это должно быть сделано без использования PHP-функций, только математические операции.
Вы можете использовать время, для и такие …
Так у меня есть номер например 9
Теперь я должен создать номер длины 9
который был бы 999999999
Если бы у меня был, например, номер 3
тогда результат должен быть 333
,
Есть идеи?
$gen = -1;
while($highest > 0) {
$gen = $highest + ($highest * 10);
$highest = $highest - 1;
}
echo $gen;
Вот метод, который не строит строку; он использует чистую математику. (Будет много, много способов сделать эту задачу)
$x=9;
$result=0;
for($i=$x; $i; --$i){ // this looping expression can be structured however you wish potato-potatoe
$result+=$x*(10**($i-1)); // x times (10 to the power of (i-1))
}
echo $result;
// 999999999
*нота: **
действует как pow()
если вы хотите посмотреть это.
Позднее редактирование: вот умный, маленький метод без петель (тихо гордый). Я только звоню range()
а также foreach()
для демонстрации; это не неотъемлемая часть моего метода.
Демо-версия: https://3v4l.org/GIjfG
foreach(range(0,9) as $n){
// echo "$n -> ",(integer)(1/9*$n*(10**$n)-($n/10)),"\n";
// echo "$n -> ",(1/9*$n*(10**$n)-(1/9*$n)),"\n";
// echo "$n -> ",(int)(1/9*10**$n)*$n,"\n";
// echo "$n -> ",(int)(10**$n/9)*$n,"\n";
echo "$n -> ",(10**$n-1)/9*$n,"\n";
}
Выход:
0 -> 0
1 -> 1
2 -> 22
3 -> 333
4 -> 4444
5 -> 55555
6 -> 666666
7 -> 7777777
8 -> 88888888
9 -> 999999999
1/9
герой этого метода, потому что он генерирует .111111111
(Повторение). Из этого числа с плавающей запятой я использую 10**$n
«сдвинуть» достаточно 1
s слева от десятичной запятой, затем умножая это число с плавающей запятой на $n
, затем число с плавающей точкой должно быть преобразовано в целое число для завершения.
Согласно комментарию @ axiac, новый герой 10**$n-1
который генерирует серию девяток до желаемой длины (без чисел с плавающей запятой). Затем разделите девять на девять, чтобы получить серию единиц, которая станет идеальным множителем. Наконец, умножьте серию единиц на входное число, чтобы получить желаемый результат.
Вам нужно выполнить две операции:
$number
, добавьте цифру $n
к этому;$n
раз).Операция № 1 проста:
$number = $number * 10 + $n;
Операция №2 еще проще:
for ($i = 0; $i < $n; $i ++)
Что еще тебе нужно?
Инициализация переменной, используемой для хранения вычисленного числа:
$number = 0;
Поместите их в порядок, и вы получите:
// The input digit
// It gives the length of the computed number
// and also its digits
$n = 8;
// The number we compute
$number = 0;
// Put the digit $n at the end of $number, $n times
for ($i = 0; $i < $n; $i ++) {
$number = $number * 10 + $n;
}
// That's all
Если intval()
принято:
$result = '';
$input = 9;
for($i=0; $i < $input; $i++){
$result .= $input;
}
$result = intval($result);
еще:
$result = 0;
$input = 9;
for($i=0; $i < $input; $i++){
$factor = 1;
for($j = 0; $j < $i; $j++){
$factor *= 10;
}
$result += $input * $factor;
}
=>
9 + 90 + 900 + 9000 + 90000 …