我分享一个2个数字的SHELL 你可以举一反三《Linux就该这么学》中有个Linux命令大全
#1.判断是不是两个数
[ $# -ne 2 ] &&{
echo "Usage:$0 num1 num2"
exit 1
}
#2.判断是否为数字
expr $1 + $2 + 999 &>/dev/null
[ $? -ne 0 ] &&{ echo "请输入两个整数
"
exit 2
}
if [ $1 -gt $2 ]
then
echo "$1>$2"
elif [ $1 -lt $2 ]
then
echo "$1<$2"
else
echo "$1=$2"
fi
========================
read -p "please two number: " a b
expr $a + $b + 999 &>/dev/null
if [ $? -ne 0 ]
then
echo "请输入两个整数"
exit 1
else
if [ $a -gt $b ]
then
echo "$a>$b"
elif [ $a -lt $b ]
then
echo "$a<$b"
else
echo "$a=$b"
fi
fiLinux环境下,C语言中整数类型最长的是long long类型,占8个字节,即使如此,其能表示的数仍是有限的。如果想要实现更大的整数相加或其他运算,就不能只用long long类型或者普通整型。我们可以使用字符串来表示整数,可以由我们规定位数,这样就可以实现更大的(某种意义上的任意长)整数相加减。在这里,我使用字符串实现的是两个任意长整数相加。由于是使用的字符串,需要考虑的情况很多。下面我罗列几个需要注意的点:
1、输入的问题:
使用的输入方法不同,需要注意的点也不同。若是使用scanf("%s",str),需要考虑字符数组的大小,但使用这个函数有个缺点,如果无意输入了空格,由于该函数不读空格,检测不出这个错误。我使用的是fgets(str,SIZE,stdin)函数,需要注意的是,若是输入的字符串长度(不包括回车)小于SIZE-1,则会将回车符读入,需要去掉回车符;若是输入的字符串长度(不包括回车)等于或大于SIZE-1,多余的字符(包括回车)不会读入,但是会留在缓冲区,输入下一个字符串时,会直接将这些字符读入,所以要先清空缓冲区(再用fgets读一下)。
2、是否是数字:
在字符串读取后,需要判断每一个字符是否是数字字符或者'\0',不是的话就要报错。
3、对齐的问题:
我们进行整数加法是最低位对齐的,从最低位开始计算,但是我们输入字符数字后,字符串是从最高位对齐的。所以解决的办法可以将两个字符串逆序,计算后将结果逆序回来。
4、进位的问题:
进行正常的整数加法不需要我们考虑进位问题,计算机会给我们解决。但是使用字符串计算就需要考虑这个问题了,当两个数相加后(这里还要考虑一个问题就是不能直接字符相加,需要减掉一个字符0),大于字符9,就要进位,下一位计算时要考虑前一位是否进位过来。(当两个字符串不等长时,不等长的部分相加不需要减字符0)最后还要考虑最高位的问题,如果有进位,长度会加1,要处理一下以保证正常输出。
其他的一下细节大家细心一点就行,下面是我实现的具体代码:
————————————————
版权声明:本文为CSDN博主「不落风渊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_38001783/article/details/77334301
评论列表(0条)