题解 | #浮点数加法#

浮点数加法

https://www.nowcoder.com/practice/ddec753f446e4ba4944e35378ba635c8

#include<stdio.h>
#include<string.h>
typedef struct {
    char S1[60];//存储整数部分
    char S2[60];//存储小数部分
} dnum;
char* min(char* S1, char* S2) {
    if (strlen(S1) > strlen(S2))return S2;
    return S1;
}
char* max(char* S1, char* S2) {
    if (strlen(S1) > strlen(S2))return S1;
    return S2;
}
void add1(char* str1, char* str2) {//计算小数部分
    int i;
    for (i = 0; i < strlen(str2); i++) {
        str1[strlen(str2) - 1 - i] += str2[strlen(str2) - 1 - i] - '0';
    }
    for (i = strlen(str1) - 1; i > 0; i--) {
        if (str1[i] >= '0' + 10) {
            str1[i - 1] += (str1[i] - '0') / 10;
            str1[i] = '0' + (str1[i] - '0') % 10;
        }
    }
}
void add2(char* str1, char* str2) {//计算整数部分
    int i;
    for (i = 0; i < strlen(str2); i++) {
        str1[strlen(str1) - 1 - i] += str2[strlen(str2) - 1 - i] - '0';
    }
    for (i = strlen(str1) - 1; i > 0; i--) {
        if (str1[i] >= '0' + 10) {
            str1[i - 1] += (str1[i] - '0') / 10;
            str1[i] = '0' + (str1[i] - '0') % 10;
        }
    }
}
int main() {
    dnum A[2];
    int i, j, n = 2;
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 40; j++)A[i].S1[j] = A[i].S2[j] = '\0';
    }
    for (i = 0; i < 2; i++)gets(A[i].S1);
    for (i = 0; i < 2; i++) {
        for (j = 0; A[i].S1[j] != '.'; j++);
        j++;
        strcat(A[i].S2, &A[i].S1[j]);
        j--;
        for (; j < strlen(A[i].S1); j++)A[i].S1[j] = '\0';
    }
    char* str1 = max(A[0].S2, A[1].S2);
    char* str2 = min(A[0].S2, A[1].S2);
    add1(str1, str2);//小数部分相加
    int flag = 0;
    if (str1[0] >= '0' + 10) {
        flag += (str1[0] - '0') / 10;//小数部分进位
        str1[0] = (str1[0] - '0') % 10 + '0';
    }
    char* a = str1;
    str1 = max(A[0].S1, A[1].S1);
    str2 = min(A[0].S1, A[1].S1);
    str1[strlen(str1) - 1] += flag;
    flag = 0;
    add2(str1, str2);//整数部分相加
    if (str1[0] >= '0' + 10) {
        flag += (str1[0] - '0') / 10;//整数部分进位
        str1[0] = (str1[0] - '0') % 10 + '0';
    }
    if (flag != 0)printf("%d", flag);//若整数部分有进位,输出
    printf("%s.%s\n", str1, a);
    return 0;
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务