HDU 1753 大明A+B
阿新 • • 發佈:2017-09-09
printf space bsp ++ pre 題解 clu sub pri
這時他已經不是那個只會做100以內加法的那個“小明”了,現在他甚至會任意長度的正小數的加法。
現在,給你兩個正的小數A和B,你的任務是代表大明計算出A+B的值。 Input 本題目包含多組測試數據,請處理到文件結束。
每一組測試數據在一行裏面包含兩個長度不大於400的正小數A和B。 Output 請在一行裏面輸出輸出A+B的值,請輸出最簡形式。詳細要求請見Sample Output。 Sample Input 1.1 2.9 1.1111111111 2.3444323343 1 1.1 Sample Output 4 3.4555434454 2.1 Author linle 題解:字符串存入,每個串分別開一個二倍長度的整形數組,倒著存, 整形數組中間值為小數點位置,從小數點開始向左向右存入。 AC代碼:
大明A+B
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 13326 Accepted Submission(s): 4886
Problem Description 話說,經過了漫長的一個多月,小明已經成長了許多,所以他改了一個名字叫“大明”。
這時他已經不是那個只會做100以內加法的那個“小明”了,現在他甚至會任意長度的正小數的加法。
現在,給你兩個正的小數A和B,你的任務是代表大明計算出A+B的值。 Input 本題目包含多組測試數據,請處理到文件結束。
每一組測試數據在一行裏面包含兩個長度不大於400的正小數A和B。 Output 請在一行裏面輸出輸出A+B的值,請輸出最簡形式。詳細要求請見Sample Output。 Sample Input 1.1 2.9 1.1111111111 2.3444323343 1 1.1 Sample Output 4 3.4555434454 2.1 Author linle 題解:字符串存入,每個串分別開一個二倍長度的整形數組,倒著存, 整形數組中間值為小數點位置,從小數點開始向左向右存入。 AC代碼:
#include<iostream>
#include <cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
char a[405],b[405];
int aa[911],bb[911];
int main()
{
while(cin>>a>>b)
{
memset(aa,0,sizeof(aa));
memset(bb,0 ,sizeof(bb));
int aaa=strlen(a),bbb=strlen(b);
for(int i=strlen(a)-1 ;i>=0;i--)
if(a[i]==‘.‘)
aaa=i;
for(int i=strlen(b)-1;i>=0;i--)
if(b[i]==‘.‘)
bbb=i;
for(int i=aaa-1,k=501;i>=0;i--,k++)
aa[k]=a[i]-‘0‘;
for(int i=aaa+1,k=500;i<strlen(a);i++,k--)
aa[k]=a[i]-‘0‘;
for(int i=bbb-1,k=501;i>=0;i--,k++)
bb[k]=b[i]-‘0‘;
for(int i=bbb+1,k=500;i<strlen(b);i++,k--)
bb[k]=b[i]-‘0‘;
for(int i=0;i<904;i++)
{
aa[i+1]+=(aa[i]+bb[i])/10;
aa[i]=(aa[i]+bb[i])%10;
}
int str=-1;
for(int i=904;i>500;i--)
if(aa[i]!=0)
{
str=i;
break;
}
if(str==-1)
printf("0");
else
for(int i=str;i>500;i--)
printf("%d",aa[i]);
int strstr=-1;
for(int i=0;i<=500;i++)
if(aa[i]!=0)
{
strstr=i;
break;
}
if(strstr==-1)
printf("\n");
else
{
printf(".");
for(int i=500;i>=strstr;i--)
printf("%d",aa[i]);
printf("\n");
}
}
return 0;
}
今天也是元氣滿滿的一天!good luck!
HDU 1753 大明A+B