大神的字符串快速幂

 #include <iostream>
#include <string>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std; //字符串的乘法
string multi(string a, string b){
int i, j, arr[], len = a.length() + b.length();
memset(arr, , sizeof arr);
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
for (int i = ; i<a.length(); i++)
for (int j = ; j<b.length(); j++)
arr[i + j] += (a[i] - '')*(b[j] - '');
for (int i = ; i<len; i++){
arr[i + ] += arr[i] / ;
arr[i] %= ;
}
string ret = string(len, '');
for (int i = ; i<len; i++)
ret[i] += arr[i];
reverse(ret.begin(), ret.end());//翻转
return ret;
}
string Str_Pow(string x, int p){
string ret = "";
while (p){
if (p & ) ret = multi(ret, x);
x = multi(x, x);
p >>= ;
}
return ret;
}
int main(){
string a;
int n;
while (cin >> a >> n){
int index = a.find('.');
if (index == -) index = ;
else {
//substr() 是字符串截取函数
a = a.substr(, index) + a.substr(index + );
index = (a.length() - index)*n;
}
a = Str_Pow(a, n);
a = a.substr(, a.length() - index) + "." + a.substr(a.length() - index);
int i;
for (i = ; i<a.length(); i++)
if (a[i] != '')
break;
//substr(i) 从i到end
a = a.substr(i);
for (int i = a.length() - ; i >= ; i--){
if (a[i] == '.'){
a = a.substr(, i);
break;
}
else if (a[i] != ''){
a = a.substr(, i + );
break;
}
}
cout << a << endl;
}
return ;
}

最新文章

  1. [Access] C# 通过 COM 组件访问 Access 文件
  2. Android 保存图片到SQLite
  3. [MongDB] 主从架构--官方极力不推荐
  4. 基本开题的感觉是了-MySQL继续继续(自定义函数&amp;存储过程)
  5. linux DMZ host 允许虚拟机以Host-only的方式上网
  6. sencha touch list(列表)、 store(数据源)、model(模型)详解
  7. Swift - 高级运算符介绍
  8. oracle查看经常使用的系统信息
  9. 反射机制(reflection)动态相关机制
  10. wmts调用路径手工合成
  11. ES6 正则的扩展
  12. Yii框架的增删改查总结分析
  13. 算法之如何实现LRU缓冲淘汰策略
  14. Calendar 得到前一天当前时间
  15. [CF1019D]Large Triangle[极角排序+二分]
  16. linux脚本启动停止一个jar
  17. 如果使用没有提供选项值的 SqlDependency,必须先调用 SqlDependency.Start(),然后才能执行添加到 SqlDependency 实例中的命令
  18. Linux中top和free命令(6/15)
  19. Problem U: 零起点学算法19——输出特殊值
  20. string为什么是final?源码分析

热门文章

  1. java后台判断发布的图片是否存在
  2. Spring boot框架项目,使用maven命令将配置文件打包到jar包外,项目运行读取jar外配置文件
  3. ThinkPHP Widget模块开发流程
  4. 服务化之Netty
  5. Codeforces Round #394 (Div. 2) B. Dasha and friends —— 暴力 or 最小表示法
  6. 一个测试基础面试题——如何测试web银行开户
  7. 使用IIS建立主机到虚拟机的端口转发
  8. codeforces 140B.New Year Cards 解题报告
  9. 「LOJ#103」子串查找 (Hash
  10. bzoj4540