题目地址:http://bailian.openjudge.cn/practice/2738
高精度计算参考链接:
https://www.cnblogs.com/c1299401227/p/5559162.html
2738:实数加法
总时间限制:
1000ms
内存限制:
65536kB
描述
求两个实数相加的和。
题目中输入输出里出现的浮点数都有如下的形式:
P1P2...Pi.Q1Q2...Qj。对于整数部分,P1P2...Pi是一个非负整数且当整数部分不为0时,P1不等于0;对于小数部分,Qj不等于0。
输入
2行,每行是一个加数。每个加数的长度不超过100。
输出
一行,即相应的和。输出保证一定是一个小数部分不为0的实数。
样例输入
0.111111111111111111111111111111
0.111111111111111111111111111111
样例输出
0.222222222222222222222222222222
思路:要看一下《王道》上的 大整数计算并熟练掌握
这个用大整数的思路总感觉有点不对,就是小数部分和整数部分分别计算,
小数需要补齐,如果正着存其实可以直接设置size,我是反着存的就循环加0。
然后整数的计算所以我感觉用结构体并没什么用,还要重载+,初始化什么的,怪麻烦的,不如直接用数组。
一会
主要是3个地方让我一直没有AC:
①整数部分有可能有小数的进位 所以
int tmp=ret.digit[i]+digit[i]+t.digit[i]+carry;
②去掉小数部分末尾的0,由于是倒着存的所以
去掉前面的所有0
if(!Calint){ //小数部分
if(size>1){
int tsize=size;
while( digit[t]==0 && tsize>1){