生成具有给定长度的相同数字
generating same number with the given length
我有这个数学作业,我应该把它写成代码。
我已经尝试了所有我能想到的,但我找不到解决方案。
所有这些都应该在不使用 php 函数的情况下完成,仅使用数学运算。
您可以使用 while、for 等...
所以我有数字 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()
进行演示;它不是我方法的组成部分。
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
到 "shift" 刚好小数点左侧 1
s,然后将这个浮点数乘以 $n
,然后float必须转为整数才能完成。
根据@axiac 的评论,新英雄是 10**$n-1
,它生成一系列 9 到所需长度(无浮点数)。接下来将 9 除以 9 生成一系列 1,这将成为完美的乘数。最后,将 1 的序列与输入数字相乘,得到所需的输出。
如果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...
您需要完成两个操作:
- 给定一个数字
$number
,在其后附加数字 $n
;
- 重复操作 #1 若干次(
$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
我有这个数学作业,我应该把它写成代码。 我已经尝试了所有我能想到的,但我找不到解决方案。 所有这些都应该在不使用 php 函数的情况下完成,仅使用数学运算。 您可以使用 while、for 等...
所以我有数字 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()
进行演示;它不是我方法的组成部分。
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
到 "shift" 刚好小数点左侧 1
s,然后将这个浮点数乘以 $n
,然后float必须转为整数才能完成。
根据@axiac 的评论,新英雄是 10**$n-1
,它生成一系列 9 到所需长度(无浮点数)。接下来将 9 除以 9 生成一系列 1,这将成为完美的乘数。最后,将 1 的序列与输入数字相乘,得到所需的输出。
如果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...
您需要完成两个操作:
- 给定一个数字
$number
,在其后附加数字$n
; - 重复操作 #1 若干次(
$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