http://acm.hdu.edu.cn/showproblem.php?pid=1753

Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

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

Problem solving report:

Description: 求两个大位正小数的相加和。

Problem solving: 通过找小数点把输入的每一个数据分成整数部分和小数部分(要考虑到只有整数部分的情况),我们再将整数部分右对齐,采用倒序相加,小数部分如此。小数部分相加的时候,要把位数在后面加“0”保证两个小数部分的位数相同(这个一开始把数组全部重置为0就行了),然后再加,还要考虑小数部分的进位情况,最后输出的时候要把小数部分的“0”去掉。

#include <stdio.h>
#include <string.h>
#define MAX(a, b) (a > b) ? a : b
int main()
{char a[410], b[410];int lena, lenb, len, k1, k2, k, p;int i, j, a1[410], a2[410], b1[410], b2[410];while (~scanf("%s%s", a, b)){memset(a1, 0, sizeof(a1));memset(a2, 0, sizeof(a2));memset(b1, 0, sizeof(b1));memset(b2, 0, sizeof(b2));k1 = lena = strlen(a);k2 = lenb = strlen(b);for (i = 0; i < lena; i++){if (a[i] == '.'){k1 = i;break;}}for (j = 0; j < lenb; j++){if (b[j] == '.'){k2 = j;break;}}for (i = k1 - 1; i >= 0; i--)a1[k1 - i - 1] = a[i] - '0';for (j = k2 - 1; j >= 0; j--)b1[k2 - j - 1] = b[j] - '0';for (i = k1 + 1; i < lena; i++)a2[i - k1 - 1] = a[i] - '0';for (j = k2 + 1; j < lenb; j++)b2[j - k2 - 1] = b[j] - '0';k = MAX(lena - k1 - 1, lenb - k2 - 1);for (i = k - 1; i > 0; i--){a2[i] += b2[i];if (a2[i] > 9){a2[i] -= 10;a2[i - 1]++;}}a2[0] += b2[0];if (a2[0] > 9){a2[0] -= 10;a1[0]++;}p = k;for (i = k - 1; i >= 0; i--){if (a2[i]){p = i;break;}}len = MAX(k1, k2);for (i = 0; i < len; i++){a1[i] += b1[i];if (a1[i] > 9){a1[i] -= 10;a1[i + 1]++;}}for (i = len; i >= 0; i--){if (!(i - len) && !a1[len])continue;printf("%d", a1[i]);}if (p != k){printf(".");for (i = 0; i <= p; i++)printf("%d", a2[i]);}printf("\n");}return 0;
}

HDU - 大明A+B(高精度)相关推荐

  1. Hdu 1753 大明A+B 高精度小数相加

    题意: 很长很长的小数相加.. 思路: 用1000长的数组处理两个小数..前500存整数..后500存小数..然后相应位相加.. 然后输出除去前导0和后面0的.. Tips: ※ strchr(cha ...

  2. HDU 1042 N!( 高精度乘法水 )

    链接:传送门 思路:高精度乘法板子题,高精度耗时又耗空间...... /**************************************************************** ...

  3. HDU 1042 N!(高精度阶乘、大数乘法)

    N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Subm ...

  4. java 输入五种水果_java代码,实现输入编号,输出对应水果的单价~~~~

    总结:总感觉有问题,因为输出我写的太不对劲了,直接把price的价格写了出来然输出显示-- package com.badu; import java.util.Scanner; //从键盘输入次数, ...

  5. hdu 1408(高精度)坑人嫩

    Problem Description 挂盐水的时候,如果滴起来有规律,先是滴一滴,停一下:然后滴二滴,停一下:再滴三滴,停一下-,现在有一个问题:这瓶盐水一共有VUL毫升,每一滴是D毫升,每一滴的速 ...

  6. java大数输出一位小数_java大数练习 大明A+B(大数小数的高精度)

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

  7. HDU 5047 Sawtooth 高精度

    题意: 给出一个\(n(0 \leq n \leq 10^{12})\),问\(n\)个\(M\)形的折线最多可以把平面分成几部分. 分析: 很容易猜出来这种公式一定的关于\(n\)的一个二次多项式. ...

  8. HDU 1047 Integer Inquiry( 高精度加法水 )

    链接:传送门 思路:高精度水题 /*************************************************************************> File ...

  9. HDU 1753 大明A+B

    大明A+B Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

最新文章

  1. [深度学习]实现一个博弈型的AI,从五子棋开始(1)
  2. 关于在学校锻炼的思考
  3. Hbase复制(Replication )
  4. 组件,控件,插件,库都是什么鬼啊
  5. linux桌面变成黑白,用虚拟机装了linux后开启为什么界面是黑色的呢?
  6. innobackupex备份工具
  7. python 后台系统 源码_这是我见过最好的博客系统!附源码(前端、后台、APP、小程序都有)...
  8. Android异步加载全解析之引入二级缓存
  9. 数据可视化API之弧线图实现
  10. 考研英语到底该如何复习?
  11. NAT穿透原理(转载)
  12. 机器人开发--AGV控制系统
  13. 正则表达式美元符号$
  14. 搜索结果Refinement 行为总结之 multi-selection refinement
  15. 怎么让计算机文件格式显示,已知文件类型的扩展名如何设置显示与隐藏?
  16. SpringBoot指定额外需要扫描的包
  17. redis系列之数据库与缓存数据一致性解决方案(简单易懂)
  18. H5跳转小程序页面/wx-open-launch-weapp/
  19. 人生,又怎会一如初见?
  20. Maven中央仓库配置文件

热门文章

  1. SAP的ABAP简单介绍
  2. OpenWrt编译自定义固件
  3. CentOS 7添加EPEL源和RPMforge源
  4. OpenStack常用命令手册
  5. IE中自动安装根数字证书
  6. 2020中国区块链产业园月度报告(10月)|链塔智库
  7. 2021年施工升降机司机(建筑特殊工种)新版试题及施工升降机司机(建筑特殊工种)模拟考试题库
  8. Voicera获1450万美元融资,智能语音真的前途无限吗?
  9. 使用removeChild动态删除节点注意
  10. charm实现非对称加密中的循环群