• HDU ACM 1063 Exponentiation 大实数乘方


    分析:大实数乘方计算。

    #include<iostream>
    #include<string>
    using namespace std;
    
    struct BigReal        //高精度实数
    {
    	int len;           //长度
    	int num[10000];
    	int point;         //小数点位置
    	BigReal()
    	{
    		len=1;
    		point=0;
    		memset(num,0,sizeof(num));
    	}
    };
    
    bool Read(BigReal& a)    //读入一个大实数
    {
    	string s;
    	int t,i;
    
    	if(cin>>s)
    	{
    		a.len=s.size();
    		a.point=0;
    		t=0;
    		for(i=s.size()-1;i>=0;i--)
    		{
    			if(s[i]=='.')
    			{
    				a.len--;
    				a.point=t;
    				continue;
    			}
    			a.num[t++]=s[i]-'0';
    		}
    		return true;
    	}
    	else
    		return false;
    }
    
    void Show(BigReal& a)
    {
    	int i,pos;
    
    	for(i=0;i<a.point && a.num[i]==0;i++) ;
    	pos=i;
    	if(a.point==a.len)
    	{
    		if(pos==a.point)
    		{
    			cout<<0<<endl;          //0.0000000的情况
    			return ;
    		}
    		else
    			cout<<'.';              //0.121313114的情况
    	}
    	for(i=a.len-1;i>=0;i--)
    	{
    		cout<<a.num[i];
    		if(i==pos) break;          //小数时后导零不输出
    		if(i==a.point) cout<<'.';
    	}
    	cout<<endl;
    }
    
    BigReal Mul(const BigReal& a,const BigReal& b)
    {
    	int i,j,len=0;
    	BigReal c;
    
    	for(i=0;i<a.len;i++)
    		for(j=0;j<b.len;j++)
    		{
    			c.num[i+j]+=a.num[i]*b.num[j];
    			if(c.num[i+j]>=10)
    			{
    				c.num[i+j+1]+=c.num[i+j]/10;
    				c.num[i+j]%=10;
    			}
    		}
    	c.point=a.point+b.point;
    	len=a.len+b.len;
    	while(c.num[len-1]==0 && len>1&&len>c.point) len--;   //处理长度,去掉前导零
    	if(c.num[len]) len++;
    	c.len=len;
    	return c;
    }
    
    int main()      
    {
    	BigReal a;
    	int b;
    
    	while(Read(a)&& scanf("%d",&b)==1)
    	{
    		BigReal ans;
    		ans.num[0]=1;
    		while(b--)
    			ans=Mul(ans,a);
    		Show(ans);
    	}
        return 0;      
    }
    


  • 相关阅读:
    python threading 无法并行问题
    flask
    jinjia2 模板不解析html
    docker 配置lnmp环境(mac环境下)
    docker基础
    django初体验
    Centos6.5 编译安装Mysql 5.5.3.7
    Mysql InnoDB事务
    删除GitHub上项目中的某个文件
    转 WPF MVVM 循序渐进 (从基础到高级)
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5202670.html
Copyright © 2020-2023  润新知