HDU - 大明A+B(高精度)
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(高精度)相关推荐
- Hdu 1753 大明A+B 高精度小数相加
题意: 很长很长的小数相加.. 思路: 用1000长的数组处理两个小数..前500存整数..后500存小数..然后相应位相加.. 然后输出除去前导0和后面0的.. Tips: ※ strchr(cha ...
- HDU 1042 N!( 高精度乘法水 )
链接:传送门 思路:高精度乘法板子题,高精度耗时又耗空间...... /**************************************************************** ...
- HDU 1042 N!(高精度阶乘、大数乘法)
N! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Subm ...
- java 输入五种水果_java代码,实现输入编号,输出对应水果的单价~~~~
总结:总感觉有问题,因为输出我写的太不对劲了,直接把price的价格写了出来然输出显示-- package com.badu; import java.util.Scanner; //从键盘输入次数, ...
- hdu 1408(高精度)坑人嫩
Problem Description 挂盐水的时候,如果滴起来有规律,先是滴一滴,停一下:然后滴二滴,停一下:再滴三滴,停一下-,现在有一个问题:这瓶盐水一共有VUL毫升,每一滴是D毫升,每一滴的速 ...
- java大数输出一位小数_java大数练习 大明A+B(大数小数的高精度)
title: java大数练习 大明A+B(大数小数的高精度) tags: [acm,杭电,大数] 题意 Problem Description 话说,经过了漫长的一个多月,小明已经成长了许多,所以他 ...
- HDU 5047 Sawtooth 高精度
题意: 给出一个\(n(0 \leq n \leq 10^{12})\),问\(n\)个\(M\)形的折线最多可以把平面分成几部分. 分析: 很容易猜出来这种公式一定的关于\(n\)的一个二次多项式. ...
- HDU 1047 Integer Inquiry( 高精度加法水 )
链接:传送门 思路:高精度水题 /*************************************************************************> File ...
- HDU 1753 大明A+B
大明A+B Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
最新文章
- [深度学习]实现一个博弈型的AI,从五子棋开始(1)
- 关于在学校锻炼的思考
- Hbase复制(Replication )
- 组件,控件,插件,库都是什么鬼啊
- linux桌面变成黑白,用虚拟机装了linux后开启为什么界面是黑色的呢?
- innobackupex备份工具
- python 后台系统 源码_这是我见过最好的博客系统!附源码(前端、后台、APP、小程序都有)...
- Android异步加载全解析之引入二级缓存
- 数据可视化API之弧线图实现
- 考研英语到底该如何复习?
- NAT穿透原理(转载)
- 机器人开发--AGV控制系统
- 正则表达式美元符号$
- 搜索结果Refinement 行为总结之 multi-selection refinement
- 怎么让计算机文件格式显示,已知文件类型的扩展名如何设置显示与隐藏?
- SpringBoot指定额外需要扫描的包
- redis系列之数据库与缓存数据一致性解决方案(简单易懂)
- H5跳转小程序页面/wx-open-launch-weapp/
- 人生,又怎会一如初见?
- Maven中央仓库配置文件