浮点数加法 九度oj
题目
[html] view plaincopy
题目描述:
求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
思路
这道题本来考察的应该是大整数加法,但是太多细节需要注意了,我提示几点:
细心,分解整数部分和小数部分,分别相加,注意大整数加法的进位
注意一个测试用例,0.0+0.0应该=0.0
注意对整数部分开始0的截断,和小数部分最后0的截断
AC代码
[cpp]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN 101
int ia[LEN], fa[LEN], ib[LEN], fb[LEN], ic[LEN], fc[LEN];
int main()
{
char str1[LEN], str2[LEN];
int i, j, k, n, l1, l2, lai, laf, lbi, lbf, temp, flmax, ilmax;
while (scanf("%d", &n) != EOF) {
while (n --) {
// 初始化
memset(ia, 0, sizeof(ia));
memset(fa, 0, sizeof(fa));
memset(ib, 0, sizeof(ib));
memset(fb, 0, sizeof(fb));
memset(ic, 0, sizeof(ic));
memset(fc, 0, sizeof(fc));
// 接收第一个浮点数
scanf("%s", str1);
l1 = strlen(str1);
// 构建整数部分数组
for (i = 0; i < l1 && str1[i] != '.'; i ++) {
ia[i] = str1[i] - '0';
}
lai = i;
// 数位替换
for (j = 0, k = lai - 1; j <= lai / 2 && j < k; j ++, k --) {
temp = ia[j];
ia[j] = ia[k];
ia[k] = temp;
}
// 构建小数部分数组
for (i += 1; i < l1; i ++) {
fa[i - 1 - lai] = str1[i] - '0';
}
laf = i - 1 - lai;
// 接收第二个浮点数
scanf("%s", str2);
l2 = strlen(str2);
// 构建整数部分数组
for (i = 0; i < l2 && str2[i] != '.'; i ++) {
ib[i] = str2[i] - '0';
}
lbi = i;
// 数位替换
for (j = 0, k = lbi - 1; j <= lbi / 2 && j < k; j ++, k --) {
temp = ib[j];
ib[j] = ib[k];
ib[k] = temp;
}
// 构建小数部分数组
for (i += 1; i < l2; i ++) {
fb[i - 1 - lbi] = str2[i] - '0';
}
lbf = i - 1 - lbi;
// 谁的小数位数更多
flmax = (laf >= lbf) ? laf : lbf;
int c = 0; //小数进位
for (i = 0, j = flmax - 1; j >= 0; j --, i ++) {
fc[i] = fa[j] + fb[j] + c;
if (fc[i] >= 10) {
c = fc[i] / 10;
fc[i] %= 10;
}else {
c = 0;
}
}
// 整数相加
ilmax = (lai >= lbi) ? lai : lbi;
for (i = 0; i < ilmax; i ++) {
ic[i] = ia[i] + ib[i] + c;
if (ic[i] >= 10) {
c = ic[i] / 10;
ic[i] %= 10;
补充:软件开发 , C++ ,