poj1001求幂
这道题目是实质上就是高精度的乘法,虽然是带小数点的数多少次幂,但是开始我们需要将它变为整数进行求幂,然后再加上小数点,然后要考虑前导0,有效数位问题,做的时候要十分的小心
#include<iostream>
#include<string>
#include<cmath>
using namespace std; int origin[]; //输入不会超过6位
int num[]; //计算的结果
int backnum[]; int main()
{
string decim;
int ep,i,j,k,numpos,value,resid,count;
long fpos,efpos; //小数位和有效数位
int pointflag;
while(cin>>decim>>ep)
{
memset(origin,,sizeof(origin));
memset(num,,sizeof(num));
memset(backnum,,sizeof(backnum));
fpos=;numpos=,count=;
//将输入的数从后往前存到int数组中
for(i=decim.size()-;i>=;i--)
{
//记录第一个不是0的位置
if(!count&&decim[i]!='')
{
efpos=i;count=;
}
//记录小数点出现的位置
if(decim[i]=='.') fpos=decim.size()--i;
else{
//如果是数字,就存下来
origin[numpos]=decim[i]-'';
numpos++;
}
}
efpos=fpos-(decim.size()--efpos);
num[]=;
//进行ep次大整数乘法
for(int x=;x<ep;x++)
{
for(i=;i<;i++)
{
resid=;
for(j=;j<;j++)
{
value=num[j]*origin[i]+resid;
backnum[j+i]+=(value%);
if(backnum[j+i]>=)
{
backnum[j+i]=backnum[j+i]%;
backnum[j+i+]++;
}
resid=value/; }
//if(value==0&&resid==0) break;
}
memcpy(num,backnum,sizeof(num));
memset(backnum,,sizeof(backnum));
}
pointflag=;
fpos=fpos*ep;
efpos=efpos*ep;
//忽略前导0
for(i=;i>=;i--) if(num[i]) break;
//判断忽略前导0后,导致实际位数不够的时候填充0的情况
//即 0.4321 20
if(i+<fpos)
{
cout<<".";
for(int z=;z<fpos-i-;z++)
{
cout<<"";
}
efpos=efpos-(fpos-i-);
pointflag=;
}
for(j=i;j>=;j--)
{ if(j+==fpos)
{
if(efpos<=) break;
cout<<".";
pointflag=;
}
if(pointflag) pointflag++;
cout<<num[j];
//如果小数后的位数超过了有效位数,停止:即忽略后0
if(pointflag>(efpos)) break;
}
cout<<endl;
}
return ;
}
poj1001求幂的更多相关文章
- C# 高精度求幂 poj1001
高精度求幂 public static char[] exponentiation(string a,int r) { ]; string b = ""; string c = a ...
- 算法:求幂(python版)
分别用迭代方法和递归方法实现求幂迭代方法的时间复杂度为O(n),空间复杂度为O(1)递归方法1的时间复杂度为O(logn),空间复杂度为O(logn)递归方法2的时间复杂度为O(n),空间复杂度为O( ...
- 九度OJ 1085 求root(N, k) -- 二分求幂及快速幂取模
题目地址:http://ac.jobdu.com/problem.php?pid=1085 题目描述: N<k时,root(N,k) = N,否则,root(N,k) = root(N',k). ...
- 快速求幂(Quick Exponentiation)
接触ACM没几天,向各路大神求教,听说ACM主要是研究算法,所以便开始了苦逼的算法学习之路.话不多说,RT所示,学习快速求幂. 在头文件<math.h>或是<cmath>中,d ...
- 高效求幂取余 算法,复杂度 log(n)
做TopCoder SRM 576 D2 L3 题目时,程序有个地方需要对一个数大量求幂并取余,导致程序运行时间很长,看了Editoral之后,发现一个超级高效的求幂并取余的算法,之前做System ...
- NYOJ--102--次方求模(快速求幂取模)
次方求模 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 求a的b次方对c取余的值 输入 第一行输入一个整数n表示测试数据的组数(n<100)每组测试只有一 ...
- [leetcode]50. Pow(x, n)求幂
Implement pow(x, n), which calculates x raised to the power n (xn). Example 1: Input: 2.00000, 10 Ou ...
- 求幂运算、多项式乘法及Horner法则的应用
一,两种不同的求幂运算 求解x^n(x 的 n 次方) ①使用递归,代码如下: private static long pow(int x, int n){ if(n == 0) return 1; ...
- 二分求幂/快速幂取模运算——root(N,k)
二分求幂 int getMi(int a,int b) { ; ) { //当二进制位k位为1时,需要累乘a的2^k次方,然后用ans保存 == ) { ans *= a; } a *= a; b / ...
随机推荐
- JS扩展 或 Jquery的扩展写法
<script>//JS扩展String函数test,其它类推String.prototype.test = function(s){ alert(this+s);}var str = ' ...
- 数学思想方法-分布式计算-linux/unix技术基础(3)
夹: ~表示当前用户的主文件夹 .它代表了当前文件夹 ..它代表的父文件夹 链接文件 使用不同的文件名指的是相同的数据或程序.硬链接 在相同的物理文件系统,创建一个硬链接 -bash-4.2$ fin ...
- ASP.NET 5简介
ASP.NET 5简介 解读ASP.NET 5 & MVC6系列(1):ASP.NET 5简介 2015-05-13 09:14 by 汤姆大叔, 3379 阅读, 39 评论, 收藏, 编辑 ...
- C#特性和反射
C#特性和反射 .NET编译器的任务之一就是为所有定义和引用的类型生成元数据描述.除了程序集中标准的元数据外,.NET平台还支持特定(attribute)把更多的元数据嵌入到程序集中. .NET特性扩 ...
- Introducing Visual Studio’s Emulator for Android
visual studio 2015支持Android开发了. Microsoft released Visual Studio 2015 Preview this week and with it ...
- ArcEngine下纵断面图的绘制
我是採用Dev控件中的画图控件来绘制的纵断面图,以下主要来介绍下输电线路选址以及纵断面图的实时绘制的实现流程. 一.关于输电线路的选址,首先要准备好基础地理数据,包含选线区的DOM,DEM,DLG以及 ...
- s2sh三大框架整合过程(仅供参考)
三大框架顾名思义就是非常有名的Struts2 ,Hibernate,Spring, 框架整合的方法很多,现在我写一个非常简单的整合过程,相信大家一看就会! 这里使用的struts-2.2.1.1.hi ...
- thrift实现js与C#通讯
利用thrift实现js与C#通讯的实例代码 1.为什么要用thrift js C#? 1.1 首先,js 通过 thrift 访问C#,实际上是一种c/s模式.thrift是通信工具,js是客户端, ...
- 关于SQL Server 2005 的自动远程数据库备份
原文:(原创)关于SQL Server 2005 的自动远程数据库备份 由于项目需要,需要对目标服务器上的数据库每天进行备份并转移,查阅网上的一些帮助,结合自己的实际需要,写了这篇文章,希望对有同样需 ...
- APUE学习笔记(2):lseek()练习与文件洞
对于lseek函数早在大一的C语言课上就有接触,但是几乎没有使用过,只记得是和文件偏移操作相关的 看了APUE上的示例,又使用od工具查看了内容,果然很神奇,很新鲜 figure3.2.c [c] # ...