• 九度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 }
  • 相关阅读:
    跨域 CORS 详解 (转)
    手机自动化(一)
    Appium Desktop-Permission to start activity denied.
    webview元素定位
    电商网站测试点 还需要整理
    性能测试第三天
    性能测试第二天
    DDD
    ATDD
    BDD
  • 原文地址:https://www.cnblogs.com/jasonJie/p/5713982.html
Copyright © 2020-2023  润新知