免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7962 | 回复: 23
打印 上一主题 下一主题

[数值计算] 输入一个数字,计算各个位上的数字之和的脚本 [复制链接]

论坛徽章:
13
CU大牛徽章
日期:2013-03-14 14:14:082016科比退役纪念章
日期:2016-07-22 11:15:35数据库技术版块每日发帖之星
日期:2016-05-27 06:20:002015亚冠之吉达阿赫利
日期:2015-08-05 10:06:542015年亚洲杯之韩国
日期:2015-04-01 16:05:42双鱼座
日期:2014-11-13 11:04:24丑牛
日期:2014-07-25 17:29:54子鼠
日期:2014-04-25 12:25:45丑牛
日期:2014-04-17 08:35:48巨蟹座
日期:2014-04-16 16:50:05CU大牛徽章
日期:2013-03-14 14:14:29CU大牛徽章
日期:2013-03-14 14:14:26
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-11-13 11:53 |只看该作者 |倒序浏览
  1. #! /bin/bash

  2. echo "input a number"

  3. read num

  4. echo "your number is $num"

  5. sum=0
  6. let temp=num/10
  7. let temp2=num%10
  8. while (( $temp != 0 ))
  9. do
  10.     let sum=sum+temp2
  11.     echo "sum is $sum"
  12.     let temp=temp/10
  13.     let temp2=temp%10
  14. done
  15.     echo "sum is $sum"
复制代码
但是为什么我测试出来结果是这样?
input a number
13
your number is 13
sum is 3
sum is 3

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
2 [报告]
发表于 2013-11-13 12:24 |只看该作者
循环体只执行了一次,输入13,开始temp=1,temp2=3
进入循环后temp=temp/10 temp=0就结束循环了
temp2=temp%10放在temp=temp/10后有问题,因为temp已经除
过10了,最后在循环结束后要把最后一个余数加上,调整一下代码大概这样的。
  1.     #! /bin/bash

  2.     echo "input a number"

  3.     read num

  4.     echo "your number is $num"

  5.     sum=0
  6.     let temp=num/10
  7.     let temp2=num%10

  8.     while (( $temp != 0 ))
  9.     do
  10.         let sum=sum+temp2
  11.         echo "sum is $sum"
  12.         temp3=$temp
  13.         let temp=temp/10
  14.         let temp2=temp3%10

  15.     done
  16.         let sum=sum+temp2
  17.         echo "sum is $sum"
复制代码

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
3 [报告]
发表于 2013-11-13 12:24 |只看该作者
  1. #! /bin/bash

  2. echo "input a number"
  3. read num
  4. echo "your number is $num"
  5. sum=0
  6. temp=$num
  7. while :
  8. do
  9.     let temp2=temp%10
  10.     let temp=temp/10
  11.     let sum=sum+temp2
  12.     echo "sum is $sum"
  13.     if [[ $temp == 0 ]]; then
  14.         break;
  15.     fi
  16. done
  17. echo "sum is $sum"
复制代码
循环问题

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
4 [报告]
发表于 2013-11-13 12:31 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
5 [报告]
发表于 2013-11-13 12:34 |只看该作者
回复 1# hmchzb19


    这个意思?
  1. echo 13 |awk -F '' '{for(;i++<NF;)sum+=$i;print sum}'
复制代码

论坛徽章:
5
白羊座
日期:2014-10-28 11:23:27水瓶座
日期:2015-01-20 10:19:022015亚冠之柏斯波利斯
日期:2015-07-11 18:17:2015-16赛季CBA联赛之同曦
日期:2015-12-23 12:38:582016猴年福章徽章
日期:2016-02-18 15:30:34
6 [报告]
发表于 2013-11-13 12:44 |只看该作者
本帖最后由 klainogn 于 2013-11-13 12:46 编辑
  1. echo 123 | awk -v FS="" '{for(;i++<NF;)a+=$i;print a}'
复制代码

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
7 [报告]
发表于 2013-11-13 12:48 |只看该作者
本帖最后由 关阴月飞 于 2013-11-13 12:51 编辑

回复 1# hmchzb19


    来个shell版的吧:
  1. #!/bin/bash
  2. read -p "input anumber:" num
  3. echo "your number is $num"
  4. n=0
  5. while [ $n -lt ${#num} ]
  6. do
  7.     let sum+=${num:n:1}
  8.     let n++
  9. done
  10. echo “sum is $sum"
复制代码

论坛徽章:
13
CU大牛徽章
日期:2013-03-14 14:14:082016科比退役纪念章
日期:2016-07-22 11:15:35数据库技术版块每日发帖之星
日期:2016-05-27 06:20:002015亚冠之吉达阿赫利
日期:2015-08-05 10:06:542015年亚洲杯之韩国
日期:2015-04-01 16:05:42双鱼座
日期:2014-11-13 11:04:24丑牛
日期:2014-07-25 17:29:54子鼠
日期:2014-04-25 12:25:45丑牛
日期:2014-04-17 08:35:48巨蟹座
日期:2014-04-16 16:50:05CU大牛徽章
日期:2013-03-14 14:14:29CU大牛徽章
日期:2013-03-14 14:14:26
8 [报告]
发表于 2013-11-13 13:21 |只看该作者
回复 7# 关阴月飞


    果然还是用数组最简单了

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
9 [报告]
发表于 2013-11-13 13:38 |只看该作者
本帖最后由 关阴月飞 于 2013-11-13 13:41 编辑

回复 8# hmchzb19


简单方法还有的是呀....  比如
  1. for i in `grep -o "[0-9]" <<<"$num"`
  2. do
  3. let sum+=$i
  4. done
  5. echo "sum is $sum"
复制代码
再比如:
  1. sed 's/./&+0/g' <<<"$num" |bc
复制代码

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
10 [报告]
发表于 2013-11-13 14:55 |只看该作者
awk啊,设分隔符为"",然后for循环求sum,多行的话记得sum清零。
某楼已经给了答案了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP