关闭

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

标签: 大数运算大数幂运算
620人阅读 评论(0) 收藏 举报
分类:

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




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8864次
    • 积分:342
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:2篇
    • 译文:0篇
    • 评论:1条
    文章存档
    最新评论