九度oj 1137
2015-07-31 20:34
295 查看
题目描述:
求2个浮点数相加的和
题目中输入输出中出现浮点数都有如下的形式:
P1P2...Pi.Q1Q2...Qj
对于整数部分,P1P2...Pi是一个非负整数
对于小数部分,Qj不等于0
输入:
对于每组案例,第1行是测试数据的组数n,每组测试数据占2行,分别是两个加数。
每组测试数据之间有一个空行,每行数据不超过100个字符
输出:
每组案例是n行,每组测试数据有一行输出是相应的和。
输出保证一定是一个小数部分不为0的浮点数
样例输入:
样例输出:
来源:
2008年北京大学软件所计算机研究生机试真题
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
while (n--) {
string a, b, res, rem;
cin >> a >> b;
int p1 = a.find('.');
int p2 = b.find('.');
int q1 = a.length() - p1 - 1;
int q2 = b.length() - p2 - 1;
int i, j;
if (q1 > q2) {
i = p1 + q2;
rem = a.substr(i + 1);
j = b.length() - 1;
} else if (q1 < q2) {
i = a.length() - 1;
j = p2 + q1;
rem = b.substr(j + 1);
} else {
i = a.length() - 1;
j = b.length() - 1;
}
int jw = 0;
for (; i >= 0 && j >= 0; --i, --j) {
if (a[i] == '.' && b[j] == '.') {
res.push_back('.');
continue;
}
int tmp = a[i] - '0' + b[j] - '0' + jw;
jw = tmp / 10;
res.push_back('0' + tmp % 10);
}
while (i >= 0) {
int tmp = a[i] - '0' + jw;
jw = tmp / 10;
res.push_back('0' + tmp % 10);
--i;
}
while (j >= 0) {
int tmp = b[j] - '0' + jw;
jw = tmp / 10;
res.push_back('0' + tmp % 10);
--j;
}
if (jw) {
res.push_back('0' + jw);
}
if (rem.empty()) {
for (int i = 0; i < res.length(); ++i) {
if (res[i] != '0') {
res = res.substr(i);
break;
}
}
reverse(res.begin(), res.end());
if (res[res.length() - 1] == '.') {
res.push_back('0');
}
} else {
reverse(res.begin(), res.end());
res += rem;
}
cout << res << endl;
}
return 0;
}
此题有一定难度啊!!!
求2个浮点数相加的和
题目中输入输出中出现浮点数都有如下的形式:
P1P2...Pi.Q1Q2...Qj
对于整数部分,P1P2...Pi是一个非负整数
对于小数部分,Qj不等于0
输入:
对于每组案例,第1行是测试数据的组数n,每组测试数据占2行,分别是两个加数。
每组测试数据之间有一个空行,每行数据不超过100个字符
输出:
每组案例是n行,每组测试数据有一行输出是相应的和。
输出保证一定是一个小数部分不为0的浮点数
样例输入:
2 0.111111111111111111111111111111 0.111111111111111111111111111111 10000000.655555555555555555555555555555 1.444444444444444444444444444445
样例输出:
0.222222222222222222222222222222 10000002.1
来源:
2008年北京大学软件所计算机研究生机试真题
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
while (n--) {
string a, b, res, rem;
cin >> a >> b;
int p1 = a.find('.');
int p2 = b.find('.');
int q1 = a.length() - p1 - 1;
int q2 = b.length() - p2 - 1;
int i, j;
if (q1 > q2) {
i = p1 + q2;
rem = a.substr(i + 1);
j = b.length() - 1;
} else if (q1 < q2) {
i = a.length() - 1;
j = p2 + q1;
rem = b.substr(j + 1);
} else {
i = a.length() - 1;
j = b.length() - 1;
}
int jw = 0;
for (; i >= 0 && j >= 0; --i, --j) {
if (a[i] == '.' && b[j] == '.') {
res.push_back('.');
continue;
}
int tmp = a[i] - '0' + b[j] - '0' + jw;
jw = tmp / 10;
res.push_back('0' + tmp % 10);
}
while (i >= 0) {
int tmp = a[i] - '0' + jw;
jw = tmp / 10;
res.push_back('0' + tmp % 10);
--i;
}
while (j >= 0) {
int tmp = b[j] - '0' + jw;
jw = tmp / 10;
res.push_back('0' + tmp % 10);
--j;
}
if (jw) {
res.push_back('0' + jw);
}
if (rem.empty()) {
for (int i = 0; i < res.length(); ++i) {
if (res[i] != '0') {
res = res.substr(i);
break;
}
}
reverse(res.begin(), res.end());
if (res[res.length() - 1] == '.') {
res.push_back('0');
}
} else {
reverse(res.begin(), res.end());
res += rem;
}
cout << res << endl;
}
return 0;
}
此题有一定难度啊!!!
相关文章推荐
- 仿Uber主界面布局,框架简单实现
- 培养狼一样的“团队”——从菜鸟管理者到追求成为优秀领导者
- poj 1328 区 间选点问题(贪心)
- 20150731
- 关于mybatis里面的Executor--转载
- hdu 3081 二分图最大匹配
- 矩阵快速幂 POJ 3070 Fibonacci
- Nim
- spring与hibernate整合(三种方式)
- 快速数论变换模板(NTT)
- 已知面积求周长
- Radar Installation(贪心,可以转化为今年暑假不ac类型)
- 【暑假集训】之被ACM金牌大神虐的第一天之dp篇(未完结)
- 数据挖掘工程师面试指南
- XMLHttpRequest Level 2的跨域功能(CORS) //另附JSONP的跨域实现
- AJAX 利用 XHR2 Progress Event 實作下載進度列
- 7_31_html_css样式
- iOS-01-UILabel
- 2037 今年暑假不AC【贪心】
- 栈和队列