幂运算
Posted 2006hanziwei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了幂运算相关的知识,希望对你有一定的参考价值。
题目描述
小明的老师布置了一道幂运算题:一般情况下,计算机所能够处理的小数的范围和精度都是非常有限的。老师给出了一个小数a和指数b,让小明求abab。小明觉得手算非常麻烦,希望你能帮助他。
输入输出格式
输入格式:
共两行:
第一行是a,第二行是b。0<a<1000,a的长度不超过10位,保证这个数字有一个小数点,但不保证这个数字有整数部分或小数部分。比如可以用“.”代表0,但是这个数据不会出现。例如000.10会写成.10。1≤b≤25,为整数。
输出格式:
只有一行,即abab的结果。整数部分前面有0必须去掉,小数部分末尾有0也必须去掉。例如000.10100需要变为.101(整数部分为0也去掉)。输出部分必须有一个小数点。
输入输出样例
输入样例:
1.0100 12
输出样例: 1.126825030131969720661201
思路:去掉小数点,求出结果,再加回小数点。
代码:
//程序名:新的C++程序
//作者:
#include<iostream>
#include<fstream>
#include<algorithm>
#include<cstring>
using namespace std;
string times(string a1,string b1)
{
int a[30001],b[30001],c[100001],la,lb,lc,z;
string ans="";
for(int i=1;i<=20000;i++)a[i]=b[i]=c[i]=0;
la=a1.size();lb=b1.size();
for(int i=0;i<=la-1;i++)a[la-i]=a1[i]-48;
for(int i=0;i<=lb-1;i++)b[lb-i]=b1[i]-48;
for(int i=1;i<=la;i++)
{
z=0;
for(int j=1;j<=lb;j++)
{
c[i+j-1]=a[i]*b[j]+z+c[i+j-1];
z=c[i+j-1]/10;
c[i+j-1]%=10;
}
c[i+lb]=z;
}
lc=la+lb;
while(c[lc]==0&&lc>1)lc--;
for(int i=lc;i>=1;i--)ans+=c[i]+48;
return ans;
}
string s,r,ans="1";
int x,n,l,w,y,z;
int main()
{
cin>>s;
cin>>n;
y=s.size()-1;
while(ans[y]==‘0‘)y--;
for(int i=0;;i++)if(s[i]==‘.‘){x=i;break;}else r+=s[i];