九度oj 题目1137:浮点数加法

题目描述:

求2个浮点数相加的和
题目中输入输出中出现浮点数都有如下的形式:
P1P2...Pi.Q1Q2...Qj
对于整数部分,P1P2...Pi是一个非负整数
对于小数部分,Qj不等于0

输入:

对于每组案例,第1行是测试数据的组数n,每组测试数据占2行,分别是两个加数。
每组测试数据之间有一个空行,每行数据不超过100个字符

输出:

每组案例是n行,每组测试数据有一行输出是相应的和。
输出保证一定是一个小数部分不为0的浮点数

样例输入:
2
0.111111111111111111111111111111
0.111111111111111111111111111111

10000000.655555555555555555555555555555
1.444444444444444444444444444445
样例输出:
0.222222222222222222222222222222
10000002.1

这道题自我感觉做的麻烦了,主要是对阶
  1 #include <cstdio>
  2 #include <cstdlib>
  3 #include <cstring>
  4 #include <algorithm>
  5 
  6 #define MAX 102
  7 
  8 char A[MAX];
  9 char B[MAX];
 10 int AZ[MAX];
 11 int BZ[MAX];
 12 int AX[MAX];
 13 int BX[MAX];
 14 
 15 int calSump(int a[], int b[], int n) {
 16     int ci = 0;
 17     for(int i = 0; i < n; i++) {
 18         int temp = a[i] + b[i] + ci;
 19         int ben = temp % 10;
 20         ci = temp/10;
 21         a[i] = ben;
 22     }
 23     return ci;
 24 }
 25 
 26 void calSumz(int a[], int b[], int n, int ci) {
 27     for(int i = 0; i < n; i++) {
 28         int temp = a[i] + b[i] + ci;
 29         int ben = temp % 10;
 30         ci = temp/10;
 31         a[i] = ben;
 32     }
 33     a[n] = ci;
 34 }
 35 
 36 int max(int a, int b) {
 37     return a>b?a:b;
 38 }
 39 
 40 int main(int argc, char const *argv[])
 41 {
 42     int n;
 43     //freopen("input.txt","r",stdin);
 44     scanf("%d",&n);
 45     while(n--) {
 46         scanf("%s",A);
 47         scanf("%s",B);
 48         int azw = 0, axw = 0;
 49         int bzw = 0, bxw = 0;
 50         for(int i = 0; i < strlen(A); i++) {
 51             if(A[i] != '.') {
 52                 azw++;
 53             }
 54             else {
 55                 break;
 56             }
 57         }
 58         //11.12 5 - 2 - 1 = 2
 59         axw = strlen(A) - azw - 1;
 60 
 61         for(int i = 0; i < strlen(B); i++) {
 62             if(B[i] != '.') {
 63                 bzw++;
 64             }
 65             else {
 66                 break;
 67             }
 68         }
 69         //11.12 5 - 2 - 1 = 2
 70         bxw = strlen(B) - bzw - 1;
 71 
 72         memset(AZ, 0, sizeof(AZ));
 73         memset(AX, 0, sizeof(AX));
 74         memset(BZ, 0, sizeof(BZ));
 75         memset(BZ, 0, sizeof(BZ));
 76 
 77         for(int i = azw - 1,j = 0; i >= 0, j < azw; i--,j++) {
 78             AZ[j] = A[i] - '0';
 79         }
 80         for(int i = bzw - 1,j = 0; i >= 0, j < bzw; i--,j++) {
 81             BZ[j] = B[i] - '0';
 82         }
 83         //0.123
 84         //0.123456789
 85         int maxz = max(azw, bzw);
 86         int maxp = max(axw, bxw);
 87         if(axw < bxw) {
 88             int j = 0;
 89             for(j = 0; j < (bxw - axw); j++) {
 90                 AX[j] = 0;
 91             }
 92             for(int i = strlen(A) - 1;j < bxw,i > azw;j++, i--) {
 93                 AX[j] = A[i] - '0';
 94             }
 95             for(int i = strlen(B) - 1, k = 0; i >= 0, k < strlen(B); i--,k++) {
 96                 BX[k] = B[i] - '0';
 97             }
 98         }
 99         else {
100             int j = 0;
101             for(j = 0; j < (axw - bxw); j++) {
102                 BX[j] = 0;
103             }
104             for(int i = strlen(B) - 1;j < axw,i > bzw;j++, i-- ) {
105                 BX[j] = B[i] - '0';
106             }
107             for(int i = strlen(A) - 1, k = 0; i >= 0, k < strlen(A); i--,k++) {
108                 AX[k] = A[i] - '0';
109             }
110         }
111         
112     
113         int pci = calSump(AX, BX, maxp);
114         
115         calSumz(AZ,BZ, maxz, pci);
116         
117         bool isAll0 = true;
118         for(int i = maxz + 1; i >= 0; i--) {
119             if(isAll0 && AZ[i] != 0) {
120                 isAll0 = false;
121             }
122             if(!isAll0) {
123                 printf("%d", AZ[i]);
124             }
125         }
126         if(isAll0) {
127             printf("%d",0);
128         }
129         printf(".");
130 
131         int last = maxp-1;
132         for(int i = 0; i < maxp; i++) {
133             if(AX[i] != 0) {
134                 last = i;
135                 break;
136             }
137         }
138         for(int i = maxp-1; i >= last; i--) {
139             printf("%d", AX[i]);
140         }
141         printf("
");
142     }
143     return 0;
144 }
原文地址:https://www.cnblogs.com/jasonJie/p/5713982.html