hdu 1753大小数相加
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1753
最简小数是小于 1 的数的整数部分需要去掉?
import java.math.BigInteger;
import java.util.Scanner;
import java.math.BigDecimal;public class Main
{public static void main(String args[]){Scanner in = new Scanner(System.in); while(in.hasNext()){ BigDecimal a = in.nextBigDecimal();BigDecimal b = in.nextBigDecimal();String ans = a.add(b).stripTrailingZeros().toPlainString(); if(ans.startsWith("0")) //去掉前导0{ans = ans.substring(1);}System.out.println(ans);}
}
}
还有这个stripTrailZero()对String和大数类都奏效可以用
C/C++版本:
/*小数点后面的位数可以直接相加,小数点前面的按末尾相加(和小数点后相加不同)。1.注意小数点的进位,如果0位(大于10)还要继续进位,大于10则取余后将tmp2记为1,不大于10则tmp2记为0,小数点前的第一位加tmp2。我就是先进完位再加tmp2错了几次。2.输出的时候判断.要不要输出。*/
#include <iostream> //1753
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;char s1[500], s2[500];
int a[500], a2[500], b[500];
int lena, lenb, tmp1, tmp2, st1, st2, d2;void cal()
{int i, j, c=0;st1=0, st2=0;for(i=0; i<lena; i++){if(s1[i]!='.') a[i]+=s1[i]-'0';else { st1=max(st1,i-1); break; }}if(i==lena) st1=lena-1;for(j=i+1; j<lena; j++)b[j-i-1]+=s1[j]-'0';for(i=0; i<lenb; i++){if(s2[i]!='.') a2[i]+=s2[i]-'0';else { st2=max(st2,i-1); break; }}if(i==lenb) st2=lenb-1;for(j=i+1; j<lenb; j++)b[j-i-1]+=s2[j]-'0';if(st1>=st2) c=1;if(c==1){for(i=st1, j=st2; j>=0; i--,j--)a[i]+=a2[j];}else{for(i=st1, j=st2; i>=0; i--,j--)a2[j]+=a[i];for(i=st2; i>=0; i--)a[i]=a2[i];}st1=max(st1,st2);
}void add()
{tmp1=0, tmp2=0;int i, j;for(i=499; i>=0; i--)if(b[i]!=0) break;for(j=i; j>=0; j--){if(b[j]>=10&&j!=0){b[j-1]+=1;b[j]%=10;}else if(b[j]>=10&&j==0){b[j]%=10;tmp2=1;}}a[st1]+=tmp2;for(j=st1; j>=1; j--){if(a[j]>=10){a[j-1]+=1;a[j]%=10;}}
}void output()
{int flag=0, i, j;for(i=499; i>=0; i--)if(b[i]!=0){d2=i; flag=1; break;}if(flag){for(i=0; i<=st1; i++)printf("%d",a[i]);printf(".");for(j=0; j<=d2; j++)printf("%d",b[j]);puts("");}else{for(i=0; i<=st1; i++)printf("%d",a[i]);puts("");}
}int main()
{while(~scanf("%s%s",s1,s2)){memset(a,0,sizeof(a));memset(a2,0,sizeof(a2));memset(b,0,sizeof(b));lena=strlen(s1);lenb=strlen(s2);cal();add();output();}return 0;
}/*
99999.889 0.111
1000.0 10000.0
112233.1 333.9
123450000 777
123400000 777.700
0.000 0.0000
99999 1
1.2333 20.2667
1212121212.1111111 21212121.33300000000000000
*/
转载于:https://www.cnblogs.com/zhangmingzhao/p/7256687.html
hdu 1753大小数相加相关推荐
- Hdu 1753 大明A+B 高精度小数相加
题意: 很长很长的小数相加.. 思路: 用1000长的数组处理两个小数..前500存整数..后500存小数..然后相应位相加.. 然后输出除去前导0和后面0的.. Tips: ※ strchr(cha ...
- 大数据相加_c 大数据相加 class
<C++语言基础>参考--学生可以相加吗? 返回:贺老师课程教学链接 谈及运算,我们总是习惯"数"的运算.而实际上,像时间之类的对象也是可以进行加减运算的.再进一步,我 ...
- 漫画:如何实现大整数相加
转载自 漫画:如何实现大整数相加 在程序中列出的 "竖式" 究竟是什么样子呢?我们以 426709752318 + 95481253129 为例,来看看大整数相加的详细步骤: 第 ...
- Golang 【大字符串相加,求和】
题目 Golang [大字符串相加,求和] 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回. 你不能使用任何內建的用于处理大整数的库(比如 BigInteg ...
- NTFS格式分区大小数值表
NTFS格式分区大小数值表 用NTFS格式分区的硬盘按照如下数值进行分区 1GB到300GB精确计算结果: 1G 1028M 2G 2056M 3G 3075M 4G 4103M 5G 5123M 6 ...
- 【Java】算法积累1——大整数相加
算法刚刚入门,每次记录下自己所学的知识总结以及理解,希望能够帮助大家,如有内容有错误或可改进的地方,欢迎一起探讨,一起进步,在此也要感谢WYSCODER学长给我的学习建议 目录 方法一: 思路: 代码 ...
- 前端js多个小数相加出现无限循环小数的解决办法
做项目的时候,发现多个小数相加值明明是100,但js 函数计算后确实99.9999,无限循环小数.恰好在前端大全的公众号上看到了一篇文章解释了这个问题,如下图: 文章链接:https://mp.wei ...
- 怎样实现大整数相加?
问题: 如果给出两个很大很大的整数,这两个数大到long类型也装不下,比如100位整数,如何求它们的和呢? 分析: 回顾起小学数学,当我们需要计算两个较大数目的加减乘除,我们是用列竖式的方式来计算的. ...
- HDU 1715 大菲波数
大菲波数 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
最新文章
- js_sl 延迟菜单
- Oracle 10g新增DROP DATABASE命令
- 面试投行的20个Java问题
- 【Python】集合类型产生KeyError异常原因及数据去重
- 《黑客秘笈——渗透测试实用指南》—第2章2.4节Web应用程序的扫描
- 【推荐系统算法学习笔记1】基本架构、专有名词、构建流程
- Istio调用链埋点原理剖析—是否真的“零修改”分享实录
- pytorch保存模型pth_pytorch中保存的模型文件.pth深入解析
- Editplus中添加System.out.println()快捷键
- 对于引用的控件被拒绝访问的解决办法的补充(续)
- Ubuntu 挂载windows硬盘突然变成只读了???
- Web安全—Web漏扫工具NetSparker安装与使用
- “互联网+”大学生创新创业大赛项目策划书
- 内存颗粒和闪存颗粒的区别_什么是内存颗粒以及内存颗粒的种类和差别
- 886. 可能的二分法
- Hadoop 3.X 和 2.X 的常用端口号和配置文件
- FL Studio教程之Riff机的简介
- 在TCP端口筛选只允
- 创业公司如何应对大公司抄袭
- 笑傲江湖之精忠报国,终于做完了