zoukankan      html  css  js  c++  java
  • 杭电分类:大数

    1002:

    1002
     1 #include<iostream>
     2 #include<string>
     3 using namespace std;
     4 
     5 #define P(x) \
     6 cout << #x " " << x << ":" << endl;
     7 
     8 #define PE(a, b, c, sum) \
     9 cout << a << " + " <<  b << " = " << (c ? "1" : "") << sum << endl;
    10 int main()
    11 {
    12     int T;
    13     cin >> T;
    14     int Case = 1;
    15     while(T--)
    16     {
    17         P(Case);
    18         ++Case;
    19         string a, b, sum;
    20         cin >> a >> b;
    21         //cout << a << " + " <<  b << " = " ;
    22         int l_a = a.size()-1, l_b = b.size()-1, c = 0;
    23         sum = (l_a > l_b ? a : b);
    24         int i, j;
    25         for(i = l_a, j = l_b; i >= 0 && j >= 0; --i, --j)
    26         {
    27             int s  = a[i] - '0' + b[j] - '0' + c;
    28             sum[i>j?i:j] = s % 10 + 48;
    29             c = s / 10;
    30         }
    31         while(i >= 0)
    32         {
    33             int s = sum[i] - '0' + c;
    34             sum[i] = s % 10 + 48;
    35             c = s / 10;
    36             i--;
    37         }
    38         while(j >= 0)
    39         {
    40             int s = sum[j] - '0' + c;
    41             sum[j] = s % 10 + 48;
    42             c = s / 10;
    43             j--;
    44         }
    45         // cout << (c ? "1" : "") << sum << endl;
    46         PE(a, b, c, sum);
    47         if(T)
    48             cout << endl;
    49     }
    50     return 0;
    51 }
    1042
     1 #include<iostream>
     2 #include<cstring>
     3 using namespace std;
     4 
     5 const int maxn = 40000;
     6 int f[maxn];
     7 int main()
     8 {
     9     int n;
    10     while(cin >> n)
    11     {
    12         memset(f, 0, sizeof(f));
    13         f[0] = 1;
    14         for(int i = 2; i <= n; ++i)
    15         {
    16 //乘以i
    17             int c = 0;
    18             for(int j = 0; j < maxn; ++j)
    19             {
    20                 int s = f[j] * i + c;
    21                 f[j] = s % 10;
    22                 c = s / 10;
    23             }
    24         }
    25         int j;
    26         for(j = maxn - 1; j >= 0 && !f[j]; --j);
    27         for(int i = j; i >= 0; --i)
    28             cout << f[i];
    29         cout << endl;
    30     }
    31     return 0;
    32 }

     1073:

    View Code
      1 #include<iostream>
      2 #include<string>
      3 #include<sstream>
      4 using namespace std;
      5 
      6 const int maxn = 1000;
      7 
      8 void reverse(string &a)
      9 {
     10     string c = "";
     11     int len = a.size();
     12     for(int i = 0; i < len; ++i)
     13         c += a[len-i-1];
     14     if(c == "")
     15         c = "0";
     16     a = c;
     17 }
     18 
     19 //**********************去首部0**************************
     20 void beg_0(string &a)
     21 {
     22     int beg = 0;
     23     for(; beg < a.size() && a[beg] == '0'; ++beg);
     24     if(beg < a.size())
     25     {
     26         string t(a.begin()+beg,a.end());
     27         a = t;
     28     }
     29     else
     30         a = "0";
     31 }
     32 //**********************去末尾0**************************
     33 void end_0(string& a)
     34 {
     35     int end = a.size()-1;
     36     for(; end >=0 && a[end] == '0'; --end);
     37     if(end >= 0)
     38     {
     39         string t(a.begin(), a.begin()+end+1);
     40         a = t;
     41     }
     42     else
     43         a = "0";
     44 }
     45 //******************小数部分相加*****************
     46 string de_add(string a, string b, int& d)
     47 {
     48     //传递小数部分向整数的的进位d
     49     int x = a.size()-b.size();
     50     if(x < 0)
     51         x = -x;
     52     string c(x, '0');
     53     if(a.size() < b.size())
     54         a += c;
     55     else if(b.size() < a.size())
     56         b += c;
     57     reverse(a);
     58     reverse(b);
     59     if(a.size() < b.size())
     60     {
     61         string c(b);
     62         b = a;
     63         a = c;
     64     }
     65     int i = 0;
     66     d = 0;
     67     while(i < b.size())
     68     {
     69         a[i] = a[i] - '0' + b[i] - '0' + d;
     70         d = a[i] / 10;
     71         a[i] = a[i] % 10;
     72         a[i] += '0';
     73         ++i;
     74     }
     75     while(i < a.size())
     76     {
     77         a[i] =a[i] - '0' + d;
     78         d = a[i] / 10;
     79         a[i] %= 10;
     80         a[i] += '0';
     81         ++i;
     82     }
     83     beg_0(a);
     84     reverse(a);
     85     return a;
     86 }
     87 //******************整数部分相加*****************
     88 string in_add(string a, string b, int x)
     89 {
     90     reverse(a);
     91     reverse(b);
     92     if(a.size() < b.size())
     93     {
     94         string c(b);
     95         b = a;
     96         a = c;
     97     }
     98     int i = 0, d = x;
     99     while(i < b.size())
    100     {
    101         a[i] = a[i] - '0' + b[i] - '0' + d;
    102         d = a[i] / 10;
    103         a[i] = a[i] % 10;
    104         a[i] += '0';
    105         ++i;
    106     }
    107     while(i < a.size())
    108     {
    109         a[i] =a[i] - '0' + d;
    110         d = a[i] / 10;
    111         a[i] %= 10;
    112         a[i] += '0';
    113         ++i;
    114     }
    115     if(d)
    116         a += '1';
    117     end_0(a);
    118     reverse(a);
    119     return a;
    120 }
    121 //*******************定位小数点**********************
    122 int locate(string a)
    123 {
    124     int i;
    125     for(i = 0; i < a.size() && a[i] != '.'; ++i);
    126     return i;
    127 }
    128 int main()
    129 {
    130     string a, b;
    131     while(cin >> a >> b)
    132     {
    133         //****************************分离小数部分和整数部分*****************************
    134         string a1(a.begin(), a.begin()+locate(a)), a2 = "0";
    135         if(locate(a) != a.size())
    136         {
    137             string t(a.begin()+locate(a)+1, a.end());
    138             a2 = t;
    139 
    140         }
    141         string b1(b.begin(), b.begin()+locate(b)), b2 = "0";
    142         if(locate(b) != b.size())
    143         {
    144             string t(b.begin()+locate(b)+1, b.end());
    145             b2 = t;
    146         }
    147         //*****************************相加************************
    148         int d = 0;
    149         string p = "", p_in = "", p_de = "";
    150         p_de = de_add(a2, b2, d);
    151         p_in = in_add(a1, b1, d);
    152         /********************************
    153         cout << p_in << endl;
    154         cout << p_de << endl;
    155         ************************************/
    156         p = p_in;
    157         if(p_de != "0")
    158             p += "." + p_de;
    159         cout << p << endl;
    160     }
    161     return 0;
    162 }

     1316:万恶的读题啊,一下连续出错了三次,最后才发现是题目上的f2 = 2,不在是斐波那契数列了!!!

    1316
      1 #include<iostream>
      2 #include<string>
      3 #include<vector>
      4 #include<cassert>
      5 using namespace std;
      6 
      7 const int maxn = 500 + 5;
      8 void reverse(string& a)
      9 {
     10     string t = "";
     11     for(int i = a.size()-1; i >= 0; --i)
     12         t += a[i];
     13     a = t;
     14 }
     15 //*******************重载加法操作符****************************
     16 string operator+(string a, string b)
     17 {
     18     reverse(a);
     19     reverse(b);
     20     int i = 0, c = 0;
     21     if(a.size() < b.size())
     22     {
     23         string t(b);
     24         b = a;
     25         a = t;
     26     }
     27     while(i < b.size())
     28     {
     29         a[i] = a[i] - '0' + b[i] - '0' + c;
     30         c = a[i] / 10;
     31         a[i] %= 10;
     32         a[i] += '0';
     33         ++i;
     34     }
     35     while(i < a.size())
     36     {
     37         a[i] = a[i] - '0' + c;
     38         c = a[i] / 10;
     39         a[i] %= 10;
     40         a[i] += '0';
     41         ++i;
     42     }
     43     if(c)
     44         a += '1';
     45     reverse(a);
     46     return a;
     47 }
     48 
     49 bool operator<(string a, string b)
     50 {
     51     if(a.size() != b.size())
     52         return a.size() < b.size();
     53     for(int i = 0; i < a.size(); ++i)
     54         if(a[i] != b[i])
     55             return a[i] < b[i];
     56     return false;
     57 }
     58 bool operator >(string a, string b)
     59 {
     60     return b < a;
     61 }
     62 bool operator <=(string a, string b)
     63 {
     64     return !(a > b);
     65 }
     66 bool operator >=(string a, string b)
     67 {
     68     return !(a < b);
     69 }
     70 
     71 int main()
     72 {
     73     string str;
     74     vector<string> svec;
     75     string a0 = "0", a1 = "1", a2 = "2";
     76     svec.push_back(a0);
     77     svec.push_back(a1);
     78     svec.push_back(a2);
     79     for(int i = 3; i < maxn; ++i)
     80     {
     81         str = "0";
     82         str = svec[i-1] + svec[i-2];
     83         svec.push_back(str);
     84     }
     85     /*********************************尝试容器上限范围********************************************
     86     int n;
     87     while(cin >> n)
     88     {
     89         cout << svec[n] << endl;
     90     }
     91     *************************************************************************************************/
     92     string a, b;
     93     while(cin >> a >> b, a != "0" || b != "0")
     94     {
     95         assert(a[0] != '-');
     96         assert(b[0] != '-');
     97         assert(a <= b);
     98         /*********************************************************************
     99         int c = 0, d;
    100         string count = "0";
    101         for(int i = 1; i < svec.size(); ++i)
    102             if(svec[i] >= a && svec[i] <= b)
    103             {
    104                 reverse(count);
    105                 count[0] = count[0] - '0' + 1;
    106                 c = count[0] / 10;
    107                 count[0] %= 10;
    108                 count[0] += '0';
    109                 //***************向前进位**********************
    110                 for(int i = 1; i < count.size() && c; ++i)
    111                 {
    112                     count[i] = count[i] - '0' + c;
    113                     c = count[i] / 10;
    114                     count[i] %= 10;
    115                     count[i] += '0';
    116                 }
    117                 //*********************最终进位********************
    118                 if(c)
    119                     count += '1';
    120                 reverse(count);
    121             }
    122         ********************************************************************/
    123         int count = 0;
    124         for(int i = 1; i < svec.size(); ++i)
    125             if(svec[i] >= a && svec[i] <= b)
    126                 ++count;
    127         cout << count << endl;
    128     }
    129     //************************************************************************/
    130     return 0;
    131 }
    1715
     1 #include<iostream>
     2 #include<string>
     3 #include<vector>
     4 using namespace std;
     5 
     6 const int maxn = 1000 + 5;
     7 
     8 void reverse(string& a)
     9 {
    10     string t = "";
    11     for(int i = a.size()-1; i >= 0; --i)
    12         t += a[i];
    13     a = t;
    14 }
    15 string operator+(string a, string b)
    16 {
    17     reverse(a);
    18     reverse(b);
    19     int i = 0, c = 0;
    20     if(a.size() < b.size())
    21     {
    22         string t(b);
    23         b = a;
    24         a = t;
    25     }
    26     while(i < b.size())
    27     {
    28         a[i] = a[i] - '0' + b[i] - '0' + c;
    29         c = a[i] / 10;
    30         a[i] %= 10;
    31         a[i] += '0';
    32         ++i;
    33     }
    34     while(i < a.size())
    35     {
    36         a[i] = a[i] - '0' + c;
    37         c = a[i] / 10;
    38         a[i] %= 10;
    39         a[i] += '0';
    40         ++i;
    41     }
    42     if(c)
    43         a += '1';
    44     reverse(a);
    45     return a;
    46 }
    47 int main()
    48 {
    49     string str;
    50     vector<string> svec;
    51     string a0 = "0", a1 = "1", a2 = "1";
    52     svec.push_back(a0);
    53     svec.push_back(a1);
    54     svec.push_back(a2);
    55     for(int i = 3; i < maxn; ++i)
    56     {
    57         str = "0";
    58         str = svec[i-1] + svec[i-2];
    59         svec.push_back(str);
    60     }
    61     int n, t;
    62     cin >> t;
    63     while(t--, cin >> n)
    64     {
    65         cout <<svec[n] << endl;
    66     }
    67     return 0;
    68 }
    1753
      1 #include<iostream>
      2 #include<string>
      3 #include<sstream>
      4 using namespace std;
      5 
      6 const int maxn = 1000;
      7 
      8 void reverse(string &a)
      9 {
     10     string c = "";
     11     int len = a.size();
     12     for(int i = 0; i < len; ++i)
     13         c += a[len-i-1];
     14     if(c == "")
     15         c = "0";
     16     a = c;
     17 }
     18 
     19 //**********************去首部0**************************
     20 void beg_0(string &a)
     21 {
     22     int beg = 0;
     23     for(; beg < a.size() && a[beg] == '0'; ++beg);
     24     if(beg < a.size())
     25     {
     26         string t(a.begin()+beg,a.end());
     27         a = t;
     28     }
     29     else
     30         a = "0";
     31 }
     32 //**********************去末尾0**************************
     33 void end_0(string& a)
     34 {
     35     int end = a.size()-1;
     36     for(; end >=0 && a[end] == '0'; --end);
     37     if(end >= 0)
     38     {
     39         string t(a.begin(), a.begin()+end+1);
     40         a = t;
     41     }
     42     else
     43         a = "0";
     44 }
     45 //******************小数部分相加*****************
     46 string de_add(string a, string b, int& d)
     47 {
     48     //传递小数部分向整数的的进位d
     49     int x = a.size()-b.size();
     50     if(x < 0)
     51         x = -x;
     52     string c(x, '0');
     53     if(a.size() < b.size())
     54         a += c;
     55     else if(b.size() < a.size())
     56         b += c;
     57     reverse(a);
     58     reverse(b);
     59     if(a.size() < b.size())
     60     {
     61         string c(b);
     62         b = a;
     63         a = c;
     64     }
     65     int i = 0;
     66     d = 0;
     67     while(i < b.size())
     68     {
     69         a[i] = a[i] - '0' + b[i] - '0' + d;
     70         d = a[i] / 10;
     71         a[i] = a[i] % 10;
     72         a[i] += '0';
     73         ++i;
     74     }
     75     while(i < a.size())
     76     {
     77         a[i] =a[i] - '0' + d;
     78         d = a[i] / 10;
     79         a[i] %= 10;
     80         a[i] += '0';
     81         ++i;
     82     }
     83     beg_0(a);
     84     reverse(a);
     85     return a;
     86 }
     87 //******************整数部分相加*****************
     88 string in_add(string a, string b, int x)
     89 {
     90     reverse(a);
     91     reverse(b);
     92     if(a.size() < b.size())
     93     {
     94         string c(b);
     95         b = a;
     96         a = c;
     97     }
     98     int i = 0, d = x;
     99     while(i < b.size())
    100     {
    101         a[i] = a[i] - '0' + b[i] - '0' + d;
    102         d = a[i] / 10;
    103         a[i] = a[i] % 10;
    104         a[i] += '0';
    105         ++i;
    106     }
    107     while(i < a.size())
    108     {
    109         a[i] =a[i] - '0' + d;
    110         d = a[i] / 10;
    111         a[i] %= 10;
    112         a[i] += '0';
    113         ++i;
    114     }
    115     if(d)
    116         a += '1';
    117     end_0(a);
    118     reverse(a);
    119     return a;
    120 }
    121 //*******************定位小数点**********************
    122 int locate(string a)
    123 {
    124     int i;
    125     for(i = 0; i < a.size() && a[i] != '.'; ++i);
    126     return i;
    127 }
    128 int main()
    129 {
    130     string a, b;
    131     while(cin >> a >> b)
    132     {
    133         //****************************分离小数部分和整数部分*****************************
    134         string a1(a.begin(), a.begin()+locate(a)), a2 = "0";
    135         if(locate(a) != a.size())
    136         {
    137             string t(a.begin()+locate(a)+1, a.end());
    138             a2 = t;
    139 
    140         }
    141         string b1(b.begin(), b.begin()+locate(b)), b2 = "0";
    142         if(locate(b) != b.size())
    143         {
    144             string t(b.begin()+locate(b)+1, b.end());
    145             b2 = t;
    146         }
    147         //*****************************相加************************
    148         int d = 0;
    149         string p = "", p_in = "", p_de = "";
    150         p_de = de_add(a2, b2, d);
    151         p_in = in_add(a1, b1, d);
    152         /********************************
    153         cout << p_in << endl;
    154         cout << p_de << endl;
    155         ************************************/
    156         p = p_in;
    157         if(p_de != "0")
    158             p += "." + p_de;
    159         cout << p << endl;
    160     }
    161     return 0;
    162 }
    163 
    164 /*
    165 
    166 
    167 0000.326 00.2365
    168 3 6
    169 3.000 5.00000
    170 8 9.4000
    171 009 563.000
    172 */

    1047:(应该是无限循环了)

    超时
     1 #include<iostream>
     2 #include<string>
     3 using namespace std;
     4 //读入到文件中,再从文件中每次读取一行,相加
     5 string reverse(const string& a)
     6 {
     7     string t = "";
     8     for(int i = a.size()-1; i >= 0; --i)
     9         t += a[i];
    10     return t;
    11 }
    12 
    13 string operator + (string a, string b)
    14 {
    15     a = reverse(a);
    16     b = reverse(b);
    17     int i = 0;
    18     if(a.size() < b.size())
    19     {
    20         string t(a);
    21         a = b;
    22         b = t;
    23     }
    24     int c = 0;
    25     string result(a);
    26     for(; i < b.size(); ++i)
    27     {
    28         result[i] = a[i] - '0' + b[i] - '0' + c;
    29         c = result[i] / 10;
    30         result[i] %= 10;
    31         result[i] += '0';
    32     }
    33     while(c && i < a.size())
    34     {
    35         result[i] = result[i] - '0' + c;
    36         c = result[i] / 10;
    37         result[i] %= 10;
    38         result[i] += '0';
    39         ++i;
    40     }
    41     if(c)
    42         result += '1';
    43     result = reverse(result);
    44     return result;
    45 }
    46 int main()
    47 {
    48     string str;
    49     int n;
    50     /************************************
    51     while(getline(cin, str) && str != "")
    52     {
    53         cout << ": " << str << endl;
    54     }
    55     ************************************/
    56     while(cin >> n, n != 0)
    57     {
    58         cin.ignore('\n');//忽略以后的空行
    59         for(int i = 0; i < n; ++i)
    60         {
    61             string result = "";
    62             while(getline(cin, str) && str != "" && str != "0")
    63             {
    64                 //遇到单独一个空行,输出结果
    65                 result =result + str;
    66             }
    67             cout << result << endl;
    68             cout << endl;
    69         }
    70     }
    71     return 0;
    72 }
    1047~正解
     1 /***************************************
     2 万恶的前导零,本来以为整数就不会出现这种情
     3 况的,还是不够谨慎啊
     4 ***************************************/
     5 #include<iostream>
     6 #include<string>
     7 using namespace std;
     8 
     9 string del_zero(string result)
    10 {
    11     int i = 0;
    12     for(; i < result.size() && result[i] == '0'; ++i);
    13     if(i == result.size())
    14         result = "0";
    15     else
    16     {
    17         string t(result.begin()+i, result.end());
    18         result = t;
    19     }
    20     return result;
    21 }
    22 string reverse(const string& a)
    23 {
    24     string t = "";
    25     for(int i = a.size()-1; i >= 0; --i)
    26         t += a[i];
    27     return t;
    28 }
    29 
    30 string add(string a, string b)
    31 {
    32     a = reverse(a);
    33     b = reverse(b);
    34     int i = 0;
    35     if(a.size() < b.size())
    36     {
    37         string t(a);
    38         a = b;
    39         b = t;
    40     }
    41     int c = 0;
    42     string result(a);
    43     for(; i < b.size(); ++i)
    44     {
    45         result[i] = a[i] - '0' + b[i] - '0' + c;
    46         c = result[i] / 10;
    47         result[i] %= 10;
    48         result[i] += '0';
    49     }
    50     while(c && i < a.size())
    51     {
    52         result[i] = result[i] - '0' + c;
    53         c = result[i] / 10;
    54         result[i] %= 10;
    55         result[i] += '0';
    56         ++i;
    57     }
    58     if(c)
    59         result += '1';
    60     result = reverse(result);
    61     return result;
    62 }
    63 int main()
    64 {
    65     string str;
    66     int n;
    67     cin >> n;
    68     for(int i = 0; i < n; ++i)
    69     {
    70         string result = "";
    71         while(getline(cin, str) && str != "0")
    72         {
    73             //遇到单独一个空行,输出结果
    74             str = del_zero(str);
    75             result = add(str, result);
    76         }
    77         cout << del_zero(result);
    78         cout << ((i == n-1)?"\n":"\n\n");
    79     }
    80     return 0;
    81 }
      1 #include<iostream>
      2 #include<vector>
      3 #include<string>
      4 using namespace std;
      5 
      6 //***************转换成整数**************************
      7 inline bool is_decimals(const string& a)
      8 {
      9     int i = a.size()-1;
     10     for(; i >= 0 && a[i] != '.'; --i);
     11     if(i != -1)
     12         return true;
     13     return false;
     14 }
     15 inline string del_f_zero(string& a)
     16 {
     17     int i = 0;
     18     for(; a[i] == '0' && i != a.size(); ++i);
     19     if(i == a.size())
     20         a = "0";
     21     else
     22     {
     23         string b(a.begin()+i, a.end());
     24         a = b;
     25     }
     26     return a;
     27 }
     28 inline string del_l_zero(string& a)
     29 {
     30     //去除末尾零
     31     int i = a.size()-1;
     32     for(; i >= 0 && a[i] == '0' && a[i] != '.'; --i);
     33     if(i != -1)
     34     {
     35         string t(a.begin(), a.begin()+i+1);
     36         a = t;
     37     }
     38     else
     39         a = "0";
     40     return a;
     41 }
     42 inline string del_point(string& a)
     43 {
     44     //000.00
     45     if(a == ".")
     46         return "0";
     47     if(a[0] == '.')
     48     {
     49         //0.300
     50         string t(a.begin()+1, a.end());
     51         return t;
     52     }
     53     if(a[a.size()-1] == '.')
     54     {
     55         //3.000
     56         string t(a.begin(), a.end()-1);
     57         return t;
     58     }
     59     int i = 0;
     60     for(; i < a.size() && a[i] != '.'; ++i);
     61     if(i != a.size())
     62     {
     63         string a_int(a.begin(), a.begin() + i);
     64         string a_float(a.begin()+i+1, a.end());
     65         a = a_int + a_float;
     66     }
     67     return a;
     68 }
     69 inline int point(string& a)
     70 {
     71     //小数的位数
     72     int i = a.size()-1;
     73     for(; i >= 0 && a[i] == '0'; --i);
     74     int j = 0;
     75     for(; j < a.size() && a[j] != '.'; ++j);
     76     return i - j;
     77 }
     78 inline string exchange(string& a)
     79 {
     80     a = del_f_zero(a);//去除前导零
     81     if(is_decimals(a))
     82     {
     83         a = del_l_zero(a);//如果是小数的话,去除末尾零
     84         a = del_point(a);//去除小数点
     85     }
     86     return a;
     87 }
     88 
     89 inline string add_point(string& a, int p)
     90 {
     91     if(p > a.size())
     92     {
     93         //0.0003
     94         string zero(p-a.size(),'0');
     95         a = "." + zero + a;
     96     }
     97     else
     98     {
     99         p = a.size()-p;
    100         string t1(a.begin(),a.begin()+p);
    101         string t2(a.begin()+p, a.end());
    102         a = t1 + "." + t2;
    103     }
    104     if(a[0] == '.')
    105     a = "0" + a;
    106     return a;
    107 }
    108 inline string reverse(const string& a)
    109 {
    110     string t(a.rbegin(), a.rend());
    111     return t;
    112 }
    113 //***************整数部分运算**************************
    114 
    115 inline string add(vector<string>& svec)
    116 {
    117     int j = svec.size()-1, i;
    118     string result(svec[j]);
    119     --j;
    120     while(j >= 0)
    121     {
    122         result = reverse(result);
    123         svec[j] = reverse(svec[j]);
    124         int c = 0;
    125         for(i = 0; i < svec[j].size(); ++i)
    126         {
    127             result[i] = result[i] - '0' + svec[j][i] - '0' + c;
    128             c = result[i] / 10;
    129             result[i] %= 10;
    130             result[i] += '0';
    131         }
    132         while(c && i < result.size())
    133         {
    134             result[i] = result[i] - '0' + c;
    135             c = result[i] / 10;
    136             result[i] %= 10;
    137             result[i] += '0';
    138             ++i;
    139         }
    140         if(c)
    141             result += '1';
    142         result = reverse(result);
    143         --j;
    144     }
    145     return result;
    146 }
    147 inline string power(string& a, int n)
    148 {
    149     if(a == "0")
    150         return "0";
    151     string final(a);
    152     a = reverse(a);
    153     for(int i_case = 2; i_case <= n; ++i_case)
    154     {
    155         int j = 0;
    156         vector<string> svec;
    157         while(j < a.size())
    158         {
    159             string result(final);
    160             result = reverse(result);
    161             int c = 0;
    162             for(int i = 0; i < result.size(); ++i)
    163             {
    164                 result[i] = (result[i] - '0')*(a[j] - '0') + c;
    165                 c = result[i] / 10;
    166                 result[i] %= 10;
    167                 result[i] += '0';
    168             }
    169             if(c)
    170                 result += c + '0';
    171             string zero(j, '0');
    172             result = reverse(result);
    173             result += zero;//对应位末尾加零
    174             svec.push_back(result);
    175             ++j;
    176         }
    177         final = add(svec);//更新每次结果
    178     }
    179     return final;
    180 }
    181 //*******************主函数****************************
    182 int main()
    183 {
    184     string a;
    185     int n;
    186     ios::sync_with_stdio(false);
    187     while(cin >> a >> n)
    188     {
    189         int p = 0;
    190         //cout << "point: " << p << endl;
    191         if(is_decimals(a))//如果是小数的话,转换成整数,并传递小数的位数
    192         {
    193             p = point(a);
    194             //cout << "p: " << p << endl;
    195         }
    196         a = exchange(a);
    197         //cout << "exchange: " << a << endl;
    198         a = power(a, n);
    199        // cout << "power: " << a << endl;
    200         p *= n;
    201         //cout << "P: " << p << endl;
    202         if(p)
    203             a = add_point(a, p);
    204         //cout << "add: " << a << endl;
    205         if(a[0] == '0' && a[1] == '.')
    206         {
    207             string t(a.begin()+1, a.end());
    208             a = t;
    209         }
    210         cout << a << endl;
    211     }
    212     return 0;
    213 }
    214 
    215 /*
    216 0
    217 00.000
    218 0.00
    219 0.300
    220 0.56000
    221 00.0000300
    222 
    223 
    224 0.000 10
    225 3.12 10
    226 0.003 3
    227 
    228 
    229 */
    1063:超时,在UVA上可以AC
  • 相关阅读:
    京东精益敏捷教练分享:敏捷助力产品创新!
    设计规范 | 详解组件控件结构体系
    Axure响应式进阶
    通讯录表设计
    TEST1
    c#练习四单元总结
    窗体控件应用总结(1)
    .NET(c#理解)
    test2-11
    test1-1
  • 原文地址:https://www.cnblogs.com/sanghai/p/2999845.html
Copyright © 2011-2022 走看看