生成具有给定长度的相同数字

时间:2018-02-28 06:58:31

标签: php math integer repeat

我有这个数学作业,我应该在代码中。 我已经尝试了所有想法,但我找不到解决方案。 所有这些都应该在不使用php函数的情况下完成,只需要数学运算 你可以使用while,for等......

所以我的号码是9 现在我应该创建长度为9

的长度999999999

例如,如果我有号码3,则结果应为333

有什么想法吗?

$gen = -1;
while($highest > 0) {
    $gen = $highest + ($highest * 10);
    $highest = $highest - 1;
}

echo $gen;

3 个答案:

答案 0 :(得分:4)

这是一个不构建字符串的方法;它使用纯数学。 (将有许多方法来完成这项任务)

$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**$n1“移位”到小数点的左侧,然后将此浮点数乘以$n,然后浮点数必须转换为完整的整数。

Per @axiac的评论,新英雄是10**$n-1,它会生成一系列所需长度的9(无浮点数)。接下来将九分为九,以产生一系列成为完美乘数的系数。最后,将一系列1和输入数相乘,得到所需的输出。

答案 1 :(得分:3)

您需要完成两项操作:

  1. 给出一个号码$number,将数字$n附加到其中;
  2. 重复操作#1一定次数($n次)。
  3. 操作#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
    

答案 2 :(得分:2)

如果接受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;
}

=&GT; 9 + 90 + 900 + 9000 + 90000 ......