zoukankan      html  css  js  c++  java
  • BigNums 之 hdu 1753

    WA了几次,考虑不是很周全啊。。。。

    //  [4/7/2014 Sjm]
    /*
    推荐测试用例:
    1 99999
    注意:
    1) 小数点左面部分 倒序 存储进数组
    2) 小数点右边部分 正序 存储进数组
    */
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cstring>
     5 #include <string>
     6 #include <cstring>
     7 #include <algorithm>
     8 using namespace std;
     9 const int MAX = 405;
    10 
    11 int myInit_lef(string str, int myStart, int myArr[])
    12 {
    13     int pos = 0;
    14     for (; myStart >= 0; myStart--){
    15         myArr[pos++] = str[myStart] - '0';
    16     }
    17     return pos;
    18 }
    19 
    20 int myInit_rig(string str, int myStart, int myArr[])
    21 {
    22     int pos = 0;
    23     for (int i = myStart; i < str.size(); i++) {
    24         myArr[pos++] = str[i] - '0';
    25     }
    26     return pos;
    27 }
    28 
    29 int main()
    30 {
    31     //freopen("input.txt", "r", stdin);
    32     //freopen("output.txt", "w", stdout);
    33     string str1, str2;
    34     while (cin >> str1 >> str2)
    35     {
    36         int myLef_1[MAX], myLef_2[MAX], myRig_1[MAX], myRig_2[MAX];
    37         memset(myLef_1, 0, sizeof(myLef_1));
    38         memset(myLef_2, 0, sizeof(myLef_2));
    39         memset(myRig_1, 0, sizeof(myRig_1));
    40         memset(myRig_2, 0, sizeof(myRig_2));
    41         int pos1 = 0, pos2 = 0; // 设初值为 0,不可能出现 '.' 在 0 位置
    42         // 寻找 '.' 位置
    43         for (int i = 0; i < str1.size(); i++) {
    44             if ('.' == str1[i])
    45                 pos1 = i;
    46         }
    47         for (int i = 0; i < str2.size(); i++) {
    48             if ('.' == str2[i])
    49                 pos2 = i;
    50         }
    51         // 若出现 pos1 或 pos2 == 0, 此时并非小数,可视为整数
    52         if (pos1 == 0) pos1 = str1.size();
    53         if (pos2 == 0) pos2 = str2.size();
    54         int lef_1_len, lef_2_len, rig_1_len, rig_2_len;
    55         // 小数点左面部分 倒序 存储进数组,eg: 123.456   存储: 321
    56         // 小数点右边部分 正序 存储进数组,eg: 0.123     存储: 123
    57         lef_1_len = myInit_lef(str1, pos1 - 1, myLef_1);
    58         rig_1_len = myInit_rig(str1, pos1 + 1, myRig_1);
    59         lef_2_len = myInit_lef(str2, pos2 - 1, myLef_2);
    60         rig_2_len = myInit_rig(str2, pos2 + 1, myRig_2);
    61         int temp = 0, myLef, myRig;
    62         myLef = max(lef_1_len, lef_2_len);
    63         myRig = max(rig_1_len, rig_2_len);
    64         string str = "";
    65         for (int i = myRig - 1; i >= 0; i--) {  
    66             // 小数点右边部分从数组最后一位开始计算 (因为正序存储)
    67             temp = myRig_1[i] + myRig_2[i] + temp;
    68             str = char('0' + (temp % 10)) + str;
    69             temp = temp / 10;
    70         }
    71         str = '.' + str;
    72         for (int i = 0; i < myLef; i++) {
    73             // 小数点左面部分从数组第一位开始计算 (因为倒序存储)
    74             temp = myLef_1[i] + myLef_2[i] + temp;
    75             str = char('0' + temp % 10) + str;
    76             temp = temp / 10;
    77         }
    78         if (temp) str = char('0' + temp) + str; // 判断是否需要进位
    79         int myend = str.size() - 1;
    80         while (str[myend] == '0' || str[myend] == '.') { 
    81             // 若含 '.' 且计算结果最后含 0,则进行去零操作
    82             if (str[myend] == '.') { myend--; break; }
    83             myend--;
    84         }
    85         for (int i = 0; i <= myend; i++)
    86             printf("%c", str[i]);
    87         printf("
    ");
    88     }
    89     return 0;
    90 }
  • 相关阅读:
    PAT:1075. PAT Judge (25) AC
    PAT:1010. 一元多项式求导 (25) AC
    PAT:1076. Forwards on Weibo (30) AC
    PAT:1086. Tree Traversals Again (25) AC
    PAT:1020. Tree Traversals (25) AC
    PAT:1051. Pop Sequence (25) AC
    PAT:1063. Set Similarity (25) AC
    PAT:1017. A除以B (20) AC
    C语言指针
    iOS block
  • 原文地址:https://www.cnblogs.com/shijianming/p/4140859.html
Copyright © 2011-2022 走看看