百練2738:實數加法題解

2738:實數加法

總時間限制: 
1000ms 
內存限制: 
65536kB
描述

求兩個實數相加的和。

題目中輸入輸出裏出現的浮點數都有如下的形式:
P1P2...Pi.Q1Q2...Qj。對於整數部分,P1P2...Pi是一個非負整數且當整數部分不爲0時,P1不等於0;對於小數部分,Qj不等於0。

輸入
2行,每行是一個加數。每個加數的長度不超過100。
輸出
一行,即相應的和。輸出保證一定是一個小數部分不爲0的實數。
樣例輸入
0.111111111111111111111111111111
0.111111111111111111111111111111
樣例輸出
0.222222222222222222222222222222

  • 查看 
  • 提交 
  • 統計 
  • 提示 
  • 提問
    • 代碼:
    #include<cstdio>
    #include<cstring>
    const int LEN = 100;
    char num1[LEN + 10],num2[LEN + 10];
    int aint[LEN],aflo[LEN],int1[LEN],int2[LEN],flo1[LEN],flo2[LEN];
    int main() {
       	scanf("%s",num1);
        scanf("%s",num2);
        int len1 = strlen(num1),len2 = strlen(num2),pos1,pos2,id1 = 0,id2 = 0;
        pos1 = strchr(num1,'.') - num1, pos2 = strchr(num2,'.') - num2;
        for(int i = pos1 + 1; i < len1; i++){
            flo1[id1++] = num1[i] - '0';
        }
        for(int i = pos2 + 1; i < len2; i++){
            flo2[id2++] = num2[i] - '0';
        }
        id1 = id1 > id2 ? id1 - 1 : id2 - 1;
        for(int i = id1; i > 0; i--){
            aflo[i] += flo1[i] + flo2[i];
            if(aflo[i] >= 10){
                aflo[i] -= 10;
                aflo[i - 1]++;
            }
        }
        aflo[0] += flo1[0] + flo2[0];
        if(aflo[0] >= 10){
            aflo[0] -= 10;
            aint[0] ++;
        }
        id1 = id2 = 0;
        for(int i = pos1 - 1; i >= 0; i--){
            int1[id1++] = num1[i] - '0';
        }
        for(int i = pos2 - 1; i >= 0; i--){
            int2[id2++] = num2[i] - '0';
        }
        id1 = id1 > id2 ? id1 : id2;
        for(int i = 0; i < id1; i++){
            aint[i] += int1[i] + int2[i];
            if(aint[i] >= 10){
                aint[i]-= 10;
                aint[i+1]++;
            }
        }
        for(id2 = id1; aint[id2] == 0 && id2 >= 0;id2--);
        for(int i = id2; i >= 0; i--) printf("%d",aint[i]);
    	if(id2 < 0) putchar('0');
        putchar('.');
        for(id1 = LEN - 1; aflo[id1] == 0 && id1 >= 0;id1--);
        for(int i = 0; i <= id1; i++) printf("%d",aflo[i]);
        putchar('\n');
        return 0;  
    }


發佈了81 篇原創文章 · 獲贊 14 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章