【发布时间】:2014-09-03 20:03:48
【问题描述】:
脚本只接受一个参数(称为n)。然后它交替地加减从 1 到 n 的每个数字。
例如:
n = 12
1 - 2 + 3 - 4 + 5 - 6 + 7 - 8 + 9 - 1 + 0 - 1 + 1 - 1 + 2
输出:5
#!/bin/bash
number=$1
result=1
if (( number == 1 || number == 0 )); then
echo
echo number: $number
echo
else
for (( i = 1; i < number; i++ )); do
if (( i < 10 )); then
if (( i % 2 == 0 )); then
let "result = result + i + 1"
else
let "result = result - i - 1"
fi
else
for (( i = 10; i <= number; i++ )); do
if (( i < 100 && i >= 10)); then
let "result = result - i/10 + i%10"
else
let "result = result - i/100 + (i%100)/10 - (i/100)%10"
fi
done
fi
done
echo
echo result: $result
echo number: $number
echo
fi
它适用于整数 0 到 9,但对于 n>9,它给出了错误的答案。
请更正我的脚本并向我解释为什么会这样。
PS 我是 bash 脚本的新手,所以我很想看到这个难题的另一种解决方案
PPS我对java很熟悉
编辑
我修复了代码,现在可以正常工作了
#!/bin/bash
number=$1
result=1
if (( number == 1 || number == 0 )); then
echo
echo number: $number
echo
else
for (( i = 1; i < number; i++ )); do
if (( i < 9 )); then
if (( i % 2 == 0 )); then
let "result = result + i + 1"
else
let "result = result - i - 1"
fi
fi
done
for (( i = 10; i <= number; i++ )); do
if (( i < 100 )); then
let "result = result - i/10 + i%10"
else
if (( i % 2 == 0 )); then
let "result = result - i/100 + (i%100)/10 - (i%100)%10"
else
let "result = result + i/100 - (i%100)/10 + (i%100)%10"
fi
fi
done
echo
echo result: $result
echo number: $number
echo
fi
【问题讨论】:
-
这是你想要的吗?您在这里期望什么运算符优先级?
result = result - i - 1 -
您应该使用
i <= number...这意味着由于0到9的正确原因,脚本实际上没有正确运行。 -
@KyleStrand 是的,整数 >= 9 是正确的,我将编辑代码
-
什么?不,现在您毫无理由地嵌套了
for循环。我指的是第一行for。结束条件错误。 -
如果一个问题还没有被隔离到你知道 bash 在哪里做你不期望的事情的地步,它还没有准备好问。要弄清楚发生的地点/方式/原因,您需要做的就是
echos。