話說,經過了漫長的乙個多月,小明已經成長了許多,所以他改了乙個名字叫「大明」。
這時他已經不是那個只會做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 話說,經過了...