问题链接:HDU1753 大明A+B。基础训练级的题,用C语言编写程序。

问题简述:参见上述链接。

问题分析:两个数可以能非常长,带有小数点,所以相加的话要么直接相加,要么转换为大数。大数的话,因为有小数点,就不那么好算了。所以还是直接相加。

程序说明:直接相加也有两种计算方法,一种是把两个数读到字符串数组中,然后对齐小数点并且补0,再行相加;另外一种方法(本程序使用的方法)是直接计算位置,进行相加。

读入数据时也有两种方法,一是用函数scanf()读入数据(字符串);二是使用函数getchar()读入数据(逐个字符读入)。由于进行相加时,需要计算小数点前后的位数,后一种可以一边读入数据一边计算。本程序采用后一种做法,逻辑上稍微复杂一些,需要更高的技巧。

程序中,需要注意两点:

1.计算结果的整数部分左边有可能有很多0;

2.输入的最后一行,有可能没有换行("\n")文件就直接结束了,需要做特殊处理。

AC的C语言程序如下:

/* HDU1753 大明A+B */#include <stdio.h>
#include <stdlib.h>#define MAXN 400char a[MAXN+1], b[MAXN+1], ans[MAXN+1];int main(void)
{char c;int aleftcount, arightcount, bleftcount, brightcount, carry, count, i, j, k, l;for(;;) {c=getchar();if(c == EOF)break;// step1 读入Ai = 0;aleftcount = 0;arightcount = 0;// setp1.1 读入A的小数点前的各位,并且位数计数while(c != '.' && c != ' ') {a[i++] = c;aleftcount++;c=getchar();}a[i++] = c; // 小数点或空格// step1.2 读入A的小数点后的各位,并且位数计数if(c != ' ')while((c=getchar()) != ' ') {a[i++] = c;arightcount++;}k = i - 1;// step2 读入Bi = 0;bleftcount = 0;brightcount = 0;// setp2.1 读入B的小数点前的各位,并且位数计数while((c=getchar()) != '.' && c != '\n') {b[i++] = c;bleftcount++;}b[i++] = c; // 小数点或换行符// step2.2 读入B的小数点后的各位,并且位数计数if(c != '\n' && c != EOF)while((c=getchar()) != '\n' && c != EOF) {b[i++] = c;brightcount++;}l = i - 1;// step3 计算A+B// step3.1 小数部分相加j = 0;// step3.1.1 拷贝长的部分if(arightcount > brightcount) {count = arightcount - brightcount;while(count--)ans[j++] = a[k--];} else if(arightcount < brightcount) {count = brightcount - arightcount;while(count--)ans[j++] = b[l--];}// step3.1.2 同长部分相加carry = 0;count = (arightcount > brightcount) ? brightcount : arightcount;for(i=1; i<=count; i++) {ans[j] = carry + a[k] + b[l] - '0';if(ans[j] > '9') {ans[j] -= 10;carry = 1;} elsecarry = 0;j++;k--;l--;}// step3.2 小数点ans[j++] = '.';// step3.3 整数部分相加k--;l--;while(k >= 0 || l >= 0) {ans[j] = carry + ((k>=0) ? a[k] : '0') + ((l>=0) ? b[l] : '0') - '0';if(ans[j] > '9') {ans[j] -= 10;carry = 1;} elsecarry = 0;j++;k--;l--;}if(carry == 1)ans[j++] = '1';// step4 输出结果// step4.1 去掉右边的0和小数点k = 0;while(ans[k] == '0')k++;if(ans[k] == '.')k++;// step4.2 输出结果for(i=j-1; i>=k; i--)putchar(ans[i]);putchar('\n');}return 0;
}

转载于:https://www.cnblogs.com/tigerisland/p/7564586.html

HDU1753 大明A+B相关推荐

  1. HDU1753 大明A+B【大数】

    大明A+B Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  2. hdu1753大明A+B

    大明A+B Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  3. HDU1753 大明A+B(大数相加)(Java题解)

    大明A+B Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  4. HDU1753—大明A+B(大正小数相加)

    大明A+B Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  5. 题目梳理(一)(2019.07.06~2019.07.20)

    一.字典树类型 A   HihoCoder1014 Trie树(已做) 题目链接    https://hihocoder.com/problemset/problem/1014 B    HDU12 ...

  6. CCF认证训练行动路线图

    通过CCF认证的训练题选自三个方面,一是CCF认证试题,二是使用北大百练的练习题等等,三是ACM-ICPC的练习题. CCF认证的试题是必须练习的,通过CCF试题的练习有助于了解试题风格特点.然而CC ...

  7. 《程序设计技术》课程辅助学习资料

    本文档提供课程相关的辅助学习资料. 阅读程序是提高程序设计水平的最为有效的方法,<程序设计技术>课程至少应该阅读后面提供链接博文中的基础部分.能够阅读完基础部分的博文,则可以给课程学习奠定 ...

  8. 杭电 OJ 提交代码需要注意的问题

    杭电acm 提交代码需要注意的问题 1. 用 Java 的时候类名请用 Main 2. Java 提交出现 PE 的可能原因有 1) 最基本的错误是空格问题,比如注意每行的末尾是否输出空格 2) 用 ...

  9. HDU1753: 大明A+B

    大明A+B Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

最新文章

  1. 再次探扩展-对xVal进行扩展解决验证不同步的问题
  2. python开发需要掌握哪些知识-Python基础进阶需要掌握哪些知识点?
  3. docker操作运行一步一步来
  4. Qtum量子链帅初受邀火星特训营面对面授课
  5. Express+Socket.IO 实现简易聊天室
  6. HTML语言字符编码
  7. Android 8.0 学习(3)---Android 8.0系统的应用图标适配
  8. 郭台铭卸任董事长 鸿海进入集体领导时代
  9. Java并发编程框架Disruptor
  10. 通过反射获取私有方法
  11. 努力只是因为想去做想做的事
  12. Windows Phone 7 不温不火学习之《Expression Blend 创建渐变效果和创建Storyboard动画》...
  13. 游戏设计创造对话探秘之迭代
  14. 高斯—若尔当(约当)消元法解异或方程组+bitset优化模板
  15. NBU备份速度快慢调整
  16. 汽车制造商代码表_汽车制造商合作打造未来汽车
  17. unity游戏开发需要学什么?
  18. 渗透测试抓包工具-wireshark
  19. 值得推荐五个编程学习的网站
  20. 驰骋督查督办系统说明书

热门文章

  1. spss分析qpcr数据_谁说菜鸟不会数据分析--SPSS篇
  2. python遍历字典的具体位置_python遍历字典
  3. 今天小暑是什么时间_来自小暑的问候,小暑黄鳝赛人参,这5种民俗食物别错过...
  4. 基于预训练深度学习算法的番茄作物病害分类
  5. 2013计算机二级试题,2013年3月全国计算机二级VFP真题
  6. linux ora 00911,python – DatabaseError:ORA-00911:无效字符
  7. 从零开始刷Leetcode——数组(268.283.414)
  8. AI从业人员需要必备这些算法和工具!
  9. mysql 递归查找父节点_MySQL递归查询树状表的子节点、父节点具体实现
  10. ibatis 存储过程 结果集 map_大数据之MapReduce shuffle过程