⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 模拟幂运算.cpp

📁 用以求解较大无法表示的幂值
💻 CPP
字号:
#include<iostream>
using namespace std;
int sizeA;
int a[1010],b[1010],c[1010];
void change(__int64 k)
{ 
	int i;
	for(i=0;k>0;i++)
	{
		a[i]=k%10;k/=10;
		sizeA=i;
	}
}
void equal(int b[],int a[],int n)
{
	for(int i=0;i<=n;i++) b[i]=a[i];
}
int main()
{
	int cases,n,sizeB,sizeC,h;
    __int64 k;
    cin>>cases;
    while(cases--)
    {   
		cin>>k>>n;
        if(k==0) { cout<<0<<endl;continue; }
		if(n==1) { cout<<k<<endl;continue; }
		if(k<0&&(n%2==1) ) cout<<"-";
		if(k<0) k=-k;
		memset(a,0,sizeof(a));
		change(k);
		equal(b,a,sizeA);
		sizeB=sizeA;
		while(n-1)
	    {
			n--;
			memset(c,0,sizeof(c));
			for(int i=0;i<=sizeA;i++)
			{
				for(int j=0;j<=sizeB;j++)
				{
					c[i+j]=a[i]*b[j]+c[i+j];
					sizeC=i+j;
				}
				for(int j=0;j<=sizeC;j++)
				{
					c[j+1]+=c[j]/10;
					c[j]=c[j]%10;
				}
			}
			if(c[sizeC+1]!=0)sizeC++;
			memset(b,0,sizeof(b));
			equal(b,c,sizeC);
			sizeB=sizeC;
		} 
		for(int i=sizeB;i>=0;i--)cout<<b[i];
		cout<<endl;
	}
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -