大数运算(8)——大数幂运算

大数幂运算的实现有了前面的大数乘法算法做铺垫,就是调用乘法函数,来循环去自乘,幂指数相应减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;
}




阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lisp1995/article/details/52347655
个人分类: 大数运算
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

大数运算(8)——大数幂运算

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭