实数相加_蓝桥杯
来源:互联网 发布:百度seo排名点击软件 编辑:程序博客网 时间:2024/05/22 01:41
题目
题目链接http://lx.lanqiao.cn/problem.page?gpid=T142
问题描述
计算两个实数相加的结果。
输入的实数满足如下要求: (1) 小数点前的整数部分最多100位,(2) 小数点后的小数部分最多100位.
输入的实数满足如下要求: (1) 小数点前的整数部分最多100位,(2) 小数点后的小数部分最多100位.
输入格式
两行字符串,每行都是一个合法的实数。合法的意思是指: 整数部分的值如果大于零,则最高位数字必定大于零. 如果整数部分的值为零,则整数部分只有一个零. 小数部分尾部可以有任意多的零. 可以没有小数部分, 此时也没有小数点. 如果有小数点, 则至少需要有一位小数部分, 且允许是零.
输出格式
相加结果。注意: 小数部分末尾如果有连续的0, 则它们都是有效数字, 不能舍去. 如果是两个整数相加, 则结果仍为整数而没有小数部分.
样例输入
样例一:0.0000000000000000000000000000000000000111111111000000000000000000100000000000000000000000000000000000000000000000000000.0样例二:34样例三:3.92样例四:1.0018.99999999999999999999999
样例输出
样例一:100000000000000000000000000000000000000000000000000000.0000000000000000000000000000000000000111111111000000000000000000样例二:7样例三:5.9样例四:10.00099999999999999999999
思路
1. 模拟。整数部分、小数部分分别逐位进位相加。
代码#include <bits/stdc++.h>using namespace std;int main(){ string a, b; string af, bf, ai, bi; string si,sf; unsigned int isz,fsz; unsigned int dpos; while (getline(cin, a)) {getline(cin, b);af.clear();bf.clear();ai = a;bi = b;dpos = a.find('.', 0);if (dpos != string::npos){ai = a.substr(0, dpos);af = a.substr(dpos+1, a.length()-dpos-1);}dpos = b.find('.', 0);if (dpos != string::npos){bi = b.substr(0, dpos);bf = b.substr(dpos+1, b.length()-dpos-1);}isz = min(ai.size(), bi.size());fsz = min(af.size(), bf.size());si = bi;sf = bf; //sf 为 af bf 中 位数最大的if (ai.size() != isz) {si = ai; swap(ai, bi);}if(af.size() != fsz) {sf = af; swap(af, bf);}int cf = 0, indf = 0;for(indf = fsz-1, cf = 0; indf >= 0; indf--) {int s = sf[indf] - '0';int a = af[indf] - '0';s += (a+cf);cf = s/10;s %= 10;sf[indf] = s + '0';}//整数部分 注意小数部分来的进位reverse(si.begin(), si.end());reverse(ai.begin(), ai.end());int c, i;for(i = 0, c = cf; i < isz; i++) {int s = si[i] - '0';int a = ai[i] - '0';s += (a+c);c = s/10;s %= 10;si[i] = s + '0';}while (c) {if(i >= si.size()) { si += "0";}int ss = si[i] - '0';ss = (ss+c);c = ss/10;ss %= 10;si[i] = ss + '0';i++;}reverse(si.begin(), si.end());reverse(ai.begin(), ai.end());if (sf.length() == 0)cout << si << endl;elsecout << si << "." << sf << endl; } return 0;}
0 0
- 实数相加_蓝桥杯
- 蓝桥杯 算法提高 实数相加
- 算法提高 实数相加
- 复数与实数的相加
- hdu1753(模拟大实数相加)
- 算法提高 ADV-18 实数相加
- 入门训练2_实数输出
- 实数
- 实数
- 实数
- 用一个sumofsquare函数,辨别是两个整数相加还是两个实数相加---C++重载
- 每日一个C++小程序(十一)--两个整数、实数、复数的相加
- 数据结构_多项式相加,相减,相乘
- 大数相加_超过longlong类型
- 蓝桥杯 圆的面积(实数输出)
- (数据结构)线性表_多项式相加1_模仿
- JAVA高精度1_大数相加_阶乘
- 【算法】华为笔试_颠倒相加_掷骰子
- OOP/第三章 多态
- 155. Min Stack
- jvm堆外直接内存实现高性能接入层
- dp问题 插花
- equals()与hashcode()
- 实数相加_蓝桥杯
- linux临时页表初始化
- Qt5--学习笔记-+openCV2-客户端、服务端回环视频显示
- python生成密码字典
- 高效率php写法(转载)
- MPI聚集 (MPI_Gather)
- jsp中的问题
- 设计模式2之策略模式(整理笔记)
- 设计模式之命令模式