浮点数高精度相加(杭电1753A+B)

 

  
  
  
  
  1. #include<iostream>  
  2. #include<cstring>  
  3. #define MAX_LEN 400  
  4. using namespace std;  
  5. int a1[MAX_LEN+10];  
  6. int a2[MAX_LEN+10];  
  7. int b1[MAX_LEN+10];  
  8. int b2[MAX_LEN+10];  
  9. char  s1[MAX_LEN+10];  
  10. char  s2[MAX_LEN+10];  
  11. int main()  
  12. {  
  13.      //2.3566  
  14.      //5.36666666  
  15.      while(cin>>s1>>s2){  
  16.      memset(a1,0,sizeof(a1));  
  17.      memset(a2,0,sizeof(a2));  
  18.      memset(b1,0,sizeof(b1));  
  19.      memset(b2,0,sizeof(b2));  
  20.      char *pdot1 = strchr(s1,'.');  
  21.      if(pdot1==NULL)  
  22.         pdot1 = s1+strlen(s1);  
  23.      int i = 0;  
  24.      char *p;  
  25.      for(p=pdot1+1; *p!='\0'; ++p)  
  26.       a2[i++] = *p-'0';  
  27.       i = 0;  
  28.      for(p=pdot1-1; p>=s1; --p)  
  29.       a1[i++] = *p-'0';  
  30.      char *pdot2 = strchr(s2,'.');  
  31.      if(pdot2==NULL)  
  32.         pdot2 = s2+strlen(s2);  
  33.      i = 0;  
  34.      for(p=pdot2+1; *p!='\0'; ++p)  
  35.       b2[i++] = *p-'0';  
  36.      i = 0;  
  37.      for(p=pdot2-1; p>=s2; --p)  
  38.       b1[i++] = *p-'0';  
  39.      int sign = 0;  
  40.      for(i = MAX_LEN-1; i>=0; --i){  
  41.         a2[i] += b2[i];  
  42.         if(a2[i]>=10){  
  43.           a2[i]-=10;  
  44.           if(i==0)  
  45.             sign = 1;  
  46.           else a2[i-1] +=1;        
  47.         }  
  48.      }  
  49.        
  50.      a1[0] += sign;  
  51.      for(i=0; i<MAX_LEN; ++i){  
  52.         a1[i] += b1[i];  
  53.         if(a1[i]>=10){  
  54.           a1[i] -= 10;  
  55.           a1[i+1] += 1;  
  56.         }  
  57.      }  
  58.      bool Isprint = 0;  
  59.      for(i=MAX_LEN; i>=0; --i)  
  60.        if(Isprint)  
  61.          cout<<a1[i];  
  62.        else if(a1[i]){  
  63.              cout<<a1[i];  
  64.            Isprint = 1;      
  65.        }  
  66.        if(!Isprint)  
  67.         cout<<'0';  
  68.      Isprint = 0;  
  69.      for(i=MAX_LEN-1; i>=0; --i)  
  70.        if(a2[i]){  
  71.          Isprint = 1;  
  72.          break;  
  73.        }  
  74.      if(Isprint){  
  75.        cout<<'.';  
  76.        for(int j=0; j<=i; ++j)  
  77.         cout<<a2[j];  
  78.      }  
  79.      cout<<endl;  
  80.      memset(s1,0,sizeof(s1));  
  81.      memset(s2,0,sizeof(s2));  
  82.     }  
  83.      //system("pause");  
  84.      return 0;  
  85. }  

 

你可能感兴趣的:(职场,浮点数,高精度,休闲,相加)