51Nod 1873 初中的算术
2024-08-30 05:38:16
大神的字符串快速幂
#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 ;
}
最新文章
- [Access] C# 通过 COM 组件访问 Access 文件
- Android 保存图片到SQLite
- [MongDB] 主从架构--官方极力不推荐
- 基本开题的感觉是了-MySQL继续继续(自定义函数&;存储过程)
- linux DMZ host 允许虚拟机以Host-only的方式上网
- sencha touch list(列表)、 store(数据源)、model(模型)详解
- Swift - 高级运算符介绍
- oracle查看经常使用的系统信息
- 反射机制(reflection)动态相关机制
- wmts调用路径手工合成
- ES6 正则的扩展
- Yii框架的增删改查总结分析
- 算法之如何实现LRU缓冲淘汰策略
- Calendar 得到前一天当前时间
- [CF1019D]Large Triangle[极角排序+二分]
- linux脚本启动停止一个jar
- 如果使用没有提供选项值的 SqlDependency,必须先调用 SqlDependency.Start(),然后才能执行添加到 SqlDependency 实例中的命令
- Linux中top和free命令(6/15)
- Problem U: 零起点学算法19——输出特殊值
- string为什么是final?源码分析
热门文章
- java后台判断发布的图片是否存在
- Spring boot框架项目,使用maven命令将配置文件打包到jar包外,项目运行读取jar外配置文件
- ThinkPHP Widget模块开发流程
- 服务化之Netty
- Codeforces Round #394 (Div. 2) B. Dasha and friends —— 暴力 or 最小表示法
- 一个测试基础面试题——如何测试web银行开户
- 使用IIS建立主机到虚拟机的端口转发
- codeforces 140B.New Year Cards 解题报告
- 「LOJ#103」子串查找 (Hash
- bzoj4540