描述:
求2个浮点数相加的和 题目中输入输出中出现浮点数都有如下的形式: P1P2...Pi.Q1Q2...Qj 对于整数部分,P1P2...Pi是一个非负整数 对于小数部分,Qj不等于0
输入描述:
对于每组案例,每组测试数据占2行,分别是两个加数。
输出描述:
每组案例是n行,每组测试数据有一行输出是相应的和。 输出保证一定是一个小数部分不为0的浮点数
示例1
输入:
0.111111111111111111111111111111
0.111111111111111111111111111111
输出:
0.222222222222222222222222222222
知识点: 字符串
AC代码:
c
#include <stdio.h>
#include <string.h>
#define MAX 100
void fenli(char n[], char nint[], char ndec[]) {
int i;
int j = 0, k = 0;
for(i = 0; i < strlen(n); i ++) {
if(n[i] == '.') {
i ++;
break;
}
nint[j ++] = n[i];
}
nint[j] = '\0';
for( ; i < strlen(n); i ++) {
ndec[k ++] = n[i];
}
ndec[k] = '\0';
}
int main() {
char a[MAX], b[MAX];
char aint[MAX], adec[MAX], bint[MAX], bdec[100];
while(scanf("%s%s", a,b) != EOF) {
fenli(a, aint, adec);
fenli(b, bint, bdec);
// 扩充小数
int adec_len = strlen(adec), bdec_len = strlen(bdec);
int dec_len;
if(adec_len > bdec_len) {
for(int i = bdec_len; i < adec_len; i ++) {
bdec[i] = '0';
}
dec_len = adec_len;
}
else if(adec_len < bdec_len){
for(int i = adec_len; i < bdec_len; i ++) {
adec[i] = '0';
}
dec_len = bdec_len;
}
else
dec_len = adec_len;
// 计算小数
int dec_sum[MAX] = {0};
int jw = 0;
for(int i = dec_len - 1; i >= 0; i --) {
dec_sum[i] = (adec[i] - '0' + bdec[i] - '0' + jw) % 10;
jw = (adec[i] - '0' + bdec[i] - '0' + jw) / 10;
}
// 扩充整数
int aint_len = strlen(aint), bint_len = strlen(bint);
int cha, int_len;
if(aint_len > bint_len) {
cha = aint_len - bint_len;
for(int i = bint_len - 1; i >= 0; i --)
bint[i + cha] = bint[i];
for(int i = 0; i < cha; i ++)
bint[i] = '0';
int_len = aint_len;
}
else if(aint_len < bint_len){
cha = bint_len - aint_len;
for(int i = aint_len - 1; i >= 0; i --)
aint[i + cha] = aint[i];
for(int i = 0; i < cha; i ++)
aint[i] = '0';
int_len = bint_len;
}
else
int_len = aint_len;
// 计算整数
int int_sum[MAX] = {0};
int zsjw = jw;
for(int i = int_len - 1; i >= 0; i --) {
int_sum[i] = (aint[i] - '0' + bint[i] - '0' + zsjw) % 10;
zsjw = (aint[i] - '0' + bint[i] - '0' + zsjw) / 10;
}
//打印
if(zsjw)
printf("%d", zsjw);
for(int i = 0; i < int_len; i ++)
printf("%d", int_sum[i]);
printf(".");
for(int i = 0; i < dec_len; i ++)
printf("%d", dec_sum[i]);
}
return 0;
}