数字X是壳中Y的三倍

时间:2015-03-24 14:47:55

标签: regex shell unix

有人告诉我,在没有使用expr的情况下,可以检查数字X是否比Y大三倍。我已经考虑了几天,但实际上无法想到任何解决方案。

有人有吗? 谢谢你的帮助。

编辑:出于好奇,是否也可以使用正则表达式检查数字是否是另一个的倍数?

2 个答案:

答案 0 :(得分:2)

如果两个数字都以“base 1”表示,那么检查一个数字是否是另一个数字的倍数对于正则表达式来说是微不足道的。

x=11111    # 5
y=111111111111111  # 15

# Using bash's regular expression operator for clarity
if [[ $y =~ ($x)* ]]; then
    echo "y is a multiple of x"
fi

几乎可以肯定你将你的数字放在基数1中,无论如何它都是一种低效的表示,所以你最好使用实际数学。使用POSIX算法:

x=5
y=15
z=$((y/x))

if [ $((z * x)) -eq "$y" ]; then
    echo "$y is a multiple of $x"
fi

由于POSIX不支持浮点运算,您可以通过验证除数z乘以除数x的商y等于被除数{{1}}来检查可除性。该部门没有剩余的剩余部分。

答案 1 :(得分:0)

我可以在bourne shell中考虑两种方式,另一种方法是John Kugelman建议的Bash:

$ cat test
#!/bin/bash

# For all bourne shells    
[ $(echo "3*$2" | bc) -eq $1 ] && echo $1 is three times bigger than $2
[ $((3*$2)) -eq $1 ]           && echo $1 is three times bigger than $2

# Only for bash
((3*$2 == $1))                 && echo $1 is three times bigger than $2

$ sh ./test 10 30
$ sh ./test 30 10
30 is three times bigger than 10
30 is three times bigger than 10
30 is three times bigger than 10