PHP实现星形三角形与数字拆分输出的技术求助
问题1:PHP实现星形三角形的正确方案
你的代码当前逻辑是输出倒星形三角形(首行10个星号,逐行递减1个),若运行异常可能是换行符适配问题;如果目标是正三角形(首行1个星号,逐行递增),则需要调整循环逻辑。
倒星形三角形(兼容Web/命令行环境)
原代码逻辑本身无错误,优化换行适配后可正常运行:
<?php $star = 10; for ($a = 1; $a <= $star; $a++) { // 输出当前行星号 for ($c = $star; $c >= $a; $c--) { echo "*"; } // 根据运行环境输出换行符 echo PHP_SAPI === 'cli' ? PHP_EOL : '<br>'; } ?>
正星形三角形(逐行递增)
如果需要首行1个星号、逐行增加的正三角,调整内层循环判断条件:
<?php $star = 10; for ($a = 1; $a <= $star; $a++) { // 输出与当前行数等量的星号 for ($c = 1; $c <= $a; $c++) { echo "*"; } echo PHP_SAPI === 'cli' ? PHP_EOL : '<br>'; } ?>
问题2:PHP循环拆分数字为位权格式输出
将数字1225441拆分为每一位对应位权的格式,可通过两种方式实现:
方法1:字符串遍历法
将数字转为字符串后逐位处理,计算对应位权值:
<?php $num = 1225441; $strNum = (string)$num; $length = strlen($strNum); for ($i = 0; $i < $length; $i++) { $digit = $strNum[$i]; // 计算当前位的位权:10的(总长度-1-i)次方 $power = pow(10, $length - 1 - $i); echo $digit * $power . PHP_EOL; } ?>
方法2:数学运算逐位提取
通过取余和除法操作逐位提取数字,结合位权计算输出:
<?php $num = 1225441; // 先计算数字的总位数 $temp = $num; $length = 0; while ($temp > 0) { $temp = (int)($temp / 10); $length++; } $divisor = pow(10, $length - 1); while ($divisor >= 1) { $digit = (int)($num / $divisor); echo $digit * $divisor . PHP_EOL; $num = $num % $divisor; $divisor = (int)($divisor / 10); } ?>
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

