大明A+B

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 14058    Accepted Submission(s): 5147

Problem Description
话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。

现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。

Input
本题目包含多组测试数据,请处理到文件结束。
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
Output
请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。
Sample Input
1.1 2.9 1.1111111111 2.3444323343 1 1.1
Sample Output
4 3.4555434454 2.1
Author
linle
Source
2007省赛集训队练习赛(6)_linle专场


问题链接:HDU1753 大明A+B。

问题简述:参见上文。

问题分析

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

程序说明

  直接相加也有两种计算方法,一种是把两个数读到字符串数组中,然后对齐小数点并且补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;
}

HDU1753 大明A+B【大数】相关推荐

  1. HDU1753 大明A+B

    问题链接:HDU1753 大明A+B.基础训练级的题,用C语言编写程序. 问题简述:参见上述链接. 问题分析:两个数可以能非常长,带有小数点,所以相加的话要么直接相加,要么转换为大数.大数的话,因为有 ...

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

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

  3. hdu1753大明A+B

    大明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. java大数输出一位小数_java大数练习 大明A+B(大数小数的高精度)

    title: java大数练习 大明A+B(大数小数的高精度) tags: [acm,杭电,大数] 题意 Problem Description 话说,经过了漫长的一个多月,小明已经成长了许多,所以他 ...

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

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

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

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

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

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

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

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

最新文章

  1. 神奇的 SQL,Group By 真扎心,原来是这样!
  2. R语言可视化绘图基础知识详解
  3. python使用for循环打印99乘法表-Python用for循环实现九九乘法表
  4. 如何把你的Windows PC变成瘦客户机
  5. 图像的连通域检测的堆栈算法
  6. C#配置及使用log4net
  7. Product 1 Modulo N CodeForces - 1514C
  8. byte转换为string乱码_每日一课 | 如何将int转换为String
  9. 太神奇!波士顿动力机器狗即将长出手臂,还能自己跑去充电
  10. wpf label字体为斜体_快来收下这份字体设计必备知识点
  11. 数据库的驱动配置文件
  12. 烹佛烹祖大炉鞴,锻凡锻圣恶钳锤
  13. PythonServer
  14. 运动控制器之追剪应用Demo
  15. WAP在线浏览器大全
  16. 对接谷歌翻译接口的WordPressSEO插件
  17. office图标异常处理
  18. Mapped Statements collection already contains value
  19. DolphinScheduler征稿 —手把手教你如何使用小豚调度
  20. 如何修改桌面的存放路径?(将桌面放到D盘或E盘)

热门文章

  1. Java中的List、Set、Map
  2. 发布一套IOCP框架
  3. vue2 自定义事件 v-model .sync
  4. sqoop从musql导入到hive中数据缺失
  5. unity 随机数_Unity 雨水滴到屏幕效果
  6. Keras——用Keras搭建分类神经网络
  7. Qt总结之二:遍历文件夹和文件目录,并过滤和获取文件信息、后缀名、前缀名(二)
  8. 优化C/C++代码的小技巧
  9. 得到MP3中隐藏的信息
  10. 类构造函数(Constructor)单冒号:用法