hdu1753

大明A+B

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 8980    Accepted Submission(s): 3185


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
#include<stdio.h> #include<string.h> int main() {  int i,j,k,l,len1,len2,flag,sum[1100],p,zb;  char a[1000],b[1000];//把兩個加數存分別存放在字符型數組a和b裏  while(scanf("%s%s",a,b)!=-1){//輸入的兩個數字符型   len1=strlen(a);//求出數組a的長度   len2=strlen(b);//求出數組b的長度   memset(sum,0,sizeof(sum));//庫函數memeset 將地址sum 開始的sizeof(sum)字節內容置成0   //sizeof(sum)的值就是sum 的長度   //memset 函數在string.h 中聲明   k=len1;//把a的長度賦值給K   l=len2;   flag=0;//不含小數點   for(i=0;a[i];i++)    if(a[i]=='.')     break;    k=i+1;//當判斷到小數點的時候將小數點在第幾位存到k裏    if(a[i])//是小數點的時候flag爲1     flag=1;   for(j=0;b[j];j++)//同數組a,定義數組b    if(b[j]=='.')     break;    l=j+1;//當判斷到小數點的時候將小數點在第幾位存到l裏    if(b[j])     flag=1;   if(i>j)   {   zb=i+1;//把兩數對齊後小數點的位置   }   else   {   zb=j+1;   }   p=zb;//把小數點下標賦值給p   i--;//位數後移   j--;   for(;;i--,j--)//計算小數點之前的部分   {    if(i>=0&&j>=0)//判斷兩個數是否爲0    {sum[p--]=a[i]-'0'+b[j]-'0';}//把字符串轉換成數值再相加    else if(i>=0&&j<0)    {sum[p--]=a[i]-'0';}    else if(i<0&&j>=0)    {sum[p--]=b[j]-'0';}    else if(i<0&&j<0)    {break;}   }   p=zb+1;//計算小數點之後的部分    for(;;k++,l++){     if(k<len1&&l<len2)//判斷小數點後面是否還有數      sum[p++]=a[k]-'0'+b[l]-'0';//把字符串轉換成數值再相加     else if(k<len1&&l>=len2)      sum[p++]=a[k]-'0';     else if(k>=len1&&l<len2)      sum[p++]=b[l]-'0';     else if(k>=len1&&l>=len2)      break;    }    for(i=p-1;i>=0;i--)//進位     if(sum[i]>=10){      sum[i]=sum[i]-10;      sum[i-1]++;     }     i=0;     while(sum[i]==0)//去除前導零      i++;     for(;i<=zb;i++)     printf("%d",sum[i]);//輸出整數部分的和     while(sum[p]==0)//去除後導0     p--;     if(p<=zb)//如果結果爲整數,去掉小數點     flag=0;    if(flag){//輸出整體小數     printf(".");     for(i=zb+1;i<=p;i++)      printf("%d",sum[i]);    }    printf("\n");  }  return 0; }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章