大数幂运算的实现有了前面的大数乘法算法做铺垫,就是调用乘法函数,来循环去自乘,幂指数相应减1,直到幂指数变为0时结束。
下面是C语言代码实现:
#include<stdio.h>
#include<string.h>
#define MAX 100
char str[MAX];
int pro[MAX*MAX];//位数分别为a,b的两个数相乘,其最大位数为a*b
int num[MAX];
void mul(int num[],int pro[],int len)//乘法函数
{
int s[MAX*MAX]={0};//每次是s[MAX*MAX]里面的个元素为0
int i,j;
for(i=0;i<len;i++)//将因数各个位上的数字与另一个各个位上的数字相乘
{
for(j=0;j<MAX*MAX;j++)
s[i+j]=s[i+j]+num[i]*pro[j];//先乘起来,后面统一进行进位
}
for(i=0;i<MAX*MAX;i++)//进行进位
{
if(s[i]>=10) //若>=10
s[i+1]=s[i+1]+s[i]/10; //将十位上数字进位
pro[i]=s[i]%10; //将个位上的数字留下
}
}
int main()
{
int n;
while(~scanf("%s %d",str,&n))
{
int i,j,k;
int len=strlen(str);
for(j=0,k=0,i=len-1;i>=0;i--)
{
num[j++]=str[i]-'0';
pro[k++]=str[i]-'0';
}
n--;//第一次是两个num[]相乘
while(n)//求幂运算
{
mul(num,pro,len);
n--;
}
for(i=MAX*MAX-1;i>0;i--) //删除0的前缀
if(pro[i])
break;
for(;i>=0;i--) //倒序输出
printf("%d",pro[i]);
printf("\n");
}
return 0;
}