在VSCode中使用PowerShell查找范围内回文数的错误排查
PowerShell回文数检测脚本错误修复
问题根源
你的脚本核心错误出在整数除法的处理逻辑:在while循环中,$temp = $temp / 10会返回浮点数(例如11除以10得到1.1),而非预期的整数1。这导致while循环无法在$temp变为0时终止,反而持续处理小数部分,最终生成的$revnum会包含小数(比如11会被错误反转成110.11...),与整数类型的$originalnumber无法匹配,因此11这类回文数被误判。
修复方案
需要将除法操作改为整数截断处理,确保$temp始终保持整数类型,让while循环能正确终止。以下三种方式均可实现:
- 强制转换为整数:
$temp = [int]($temp / 10) - 使用Math类截断方法:
$temp = [Math]::Truncate($temp / 10) - PowerShell 7+版本直接用整数除法运算符:
$temp = $temp // 10
修正后的完整脚本
Clear-Host; Write-Verbose -Message "This script is for checking Palindrome numbers between a range" -Verbose; Write-Host "Please enter the range of numbers" -ForegroundColor Cyan; [int]$range1 = Read-Host "Enter the first limit"; [int]$range2 = Read-Host "Enter the last limit"; for ($i = $range1; $i -le $range2; $i++) { $temp = $i; $originalnumber = $i; $revnum = 0; while ($temp -ne 0) { $remainder = $temp % 10; $revnum = $revnum * 10 + $remainder; # 修正:使用整数截断除法,确保$temp始终为整数 $temp = [int]($temp / 10); } if ($originalnumber -eq $revnum) { Write-Host "$originalnumber is a palindrome number between $range1 and $range2" -ForegroundColor Green; } else { Write-Host "$originalnumber is not a palindrome number" -ForegroundColor Red; } }
测试结果示例
输入范围10-15,修正后的脚本输出如下:
VERBOSE: This script is for checking Palindrome numbers between a range Please enter the range of numbers Enter the first limit: 10 Enter the last limit: 15 10 is not a palindrome number 11 is a palindrome number between 10 and 15 12 is not a palindrome number 13 is not a palindrome number 14 is not a palindrome number 15 is not a palindrome number
内容的提问来源于stack exchange,提问作者Sushmita Chakraborty
相关产品推荐
相关产品推荐

