51Nod 1873 初中的算术

Posted jaydenouyang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51Nod 1873 初中的算术相关的知识,希望对你有一定的参考价值。

大神的字符串快速幂

 1 #include <iostream>
 2 #include <string>
 3 #include <algorithm>
 4 #include <cstdio>
 5 #include <cstring>
 6 using namespace std;
 7 
 8 //字符串的乘法
 9 string multi(string a, string b){
10     int i, j, arr[200], len = a.length() + b.length();
11     memset(arr, 0, sizeof arr);
12     reverse(a.begin(), a.end());
13     reverse(b.begin(), b.end());
14     for (int i = 0; i<a.length(); i++)
15     for (int j = 0; j<b.length(); j++)
16         arr[i + j] += (a[i] - 0)*(b[j] - 0);
17     for (int i = 0; i<len; i++){
18         arr[i + 1] += arr[i] / 10;
19         arr[i] %= 10;
20     }
21     string ret = string(len, 0);
22     for (int i = 0; i<len; i++)
23         ret[i] += arr[i];
24     reverse(ret.begin(), ret.end());//翻转
25     return ret;
26 }
27 string Str_Pow(string x, int p){
28     string ret = "1";
29     while (p){
30         if (p & 1) ret = multi(ret, x);
31         x = multi(x, x);
32         p >>= 1;
33     }
34     return ret;
35 }
36 int main(){
37     string a;
38     int n;
39     while (cin >> a >> n){
40         int index = a.find(.);
41         if (index == -1) index = 0;
42         else {
43             //substr() 是字符串截取函数
44             a = a.substr(0, index) + a.substr(index + 1);
45             index = (a.length() - index)*n;
46         }
47         a = Str_Pow(a, n);
48         a = a.substr(0, a.length() - index) + "." + a.substr(a.length() - index);
49         int i;
50         for (i = 0; i<a.length(); i++)
51             if (a[i] != 0)
52                 break;
53         //substr(i) 从i到end
54         a = a.substr(i);
55         for (int i = a.length() - 1; i >= 0; i--){
56             if (a[i] == .){
57                 a = a.substr(0, i); 
58                 break;
59             }
60             else if (a[i] != 0){
61                 a = a.substr(0, i + 1);
62                 break;
63             }
64         }
65         cout << a << endl;
66     }
67     return 0;
68 }

 

以上是关于51Nod 1873 初中的算术的主要内容,如果未能解决你的问题,请参考以下文章

51nod 1873 初中的算术Java BigDecimal/高精度小数

1873 初中的算术

初中的算数(高精度)

51nod 1873 高精度计算

51nod 1189 算术基本定理/组合数学

同治光绪之交的九江城