HDU 1753 大明A B(仔細一點耐心一點)

2021-10-02 08:45:28 字數 2112 閱讀 3741

話說,經過了漫長的乙個多月,小明已經成長了許多,所以他改了乙個名字叫「大明」。

這時他已經不是那個只會做100以內加法的那個「小明」了,現在他甚至會任意長度的正小數的加法。

現在,給你兩個正的小數a和b,你的任務是代表大明計算出a+b的值。

本題目包含多組測試資料,請處理到檔案結束。

每一組測試資料在一行裡面包含兩個長度不大於400的正小數a和b。

請在一行裡面輸出輸出a+b的值,請輸出最簡形式。詳細要求請見sample output。

1.1 2.9

1.1111111111 2.3444323343

1 1.1

4

3.4555434454

2.1

這個**真的寫吐了,還是需要自己把思路捋一捋吧,**還有一些其實多餘的地方,可以優化一下。不確定自己**錯了的話,其實可以再去找一下其他樣例測試一下。

#include

#include

#include

#include

#include

#include

#define ll long long

using

namespace std;

char a[

505]

,b[505];

//儲存輸入

int a1[

505]

,b1[

505]

;int sum[

505]

;//儲存最後結果

intmain()

i=0;

while

(b[i]

!='.'

&&b[i]

) i++;if

(b[i]

=='.'

)//小數點後面的位數可能不一樣,不一樣的直接後面補零

if(pelse

if(p>q)

//小數點後面的相加

for(

int i=p;i>=

0;i--)}

//儲存小數點前面的數

p=q=-1

;for

(int i=

0;a[i]

!='.'

&&a[i]

;i++

) a1[

++p]

=a[i]

-'0'

;for

(int i=

0;b[i]

!='.'

&&b[i]

;i++

) b1[

++q]

=b[i]

-'0'

;//小數點後面可能需要進製

if(sum[kk]

>9)

kk++

; sum[kk+1]

=sum[kk]

; sum[kk]=-

1;//標誌小數點的位置

if(kk==-1

) kk=0;

//可能沒有小數點

//小數點前面的數字相加

if(p==q)}}

//前面的位數也可能不等

else

if(p>q)

p--; q--;}

for(

int i=p;i>=

0;i--)}

}else

if(pp--

; q--;}

for(

int i=q;i>=

0;i--)}

}int j=0;

while

(sum[j]==0

) j++

;//去除後導零

if(sum[kk+1]

) kk++

;//最後相加的時候產生了進製,位數要加1

if(sum[kk]==0

&&sum[kk-1]

!=-1) kk--

;//去除後導零

for(

int i=kk;i>=j;i--

)printf

("\n");

}return0;

}

HDU1753 大明A B 大數

include includeusing namespace std int carry 0 string get sum string str1,string str2 tmp 0 max str index in max tmp index in min index in max while c...

HDU 1753 大明A B(高階版大整數加法)

大明a b 話說,經過了漫長的乙個多月,小明已經成長了許多,所以他改了乙個名字叫 大明 這時他已經不是那個只會做100以內加法的那個 小明 了,現在他甚至會任意長度的正小數的加法 現在,給你兩個正的小數a和b,你的任務是代表大明計算出a b的值。input 本題目包含多組測試資料,請處理到檔案結束。...

小數精度 1753 大明A B

time limit 3000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 4947 accepted submission s 1646 problem description 話說,經過了...