#include "stdio.h" #include"stdlib.h" #define max 500 void yiwei(int *a,int n,int m) { for(int i=m-1;i>=0;i--) { if(i-n>=0) { a[i]=a[i-n]; //a[i-n]=0; } else a[i]=0; } } void main() { int a[max],bb[max],b[max][max],c[max],m,n,temp,i,j,k; scanf("%d%d",&m,&n); printf("提示:默认结果不超过500位,如果超过500位则出错!\n"); printf("%d的%d次方:",m,n); for(i=0;i<max;i++) { a[i]=0; c[i]=0; for(j=0;j<max;j++) b[i][j]=0; } if(m<10) a[0]=m; else { temp=m; j=0; while(temp!=0) { a[j]=temp%10; temp=temp/10; j++; } } // //m=16;126 while (n>1) { for(i=0;i<max;i++) for(j=0;j<max;j++) b[i][j]=0; for(i=0;i<max;i++) bb[i]=a[i]*m; for(i=0;i<max;i++) if(bb[i]<10) b[i][0]=bb[i]; else { temp=bb[i]; for(j=0;j<max;j++) { b[i][j]=temp%10; temp=temp/10; } } for(i=0;i<max;i++) { yiwei(b[i],i,max); } //右加 for(i=0;i<max;i++) { for(j=0;j<max;j++) c[i]=c[i]+b[j][i]; } //c移位 for(i=0;i<max;i++) { if(c[i]>=10) { temp=c[i]; j=i; while(temp!=0) { if(j==i) c[j]=temp%10; else c[j]=c[j]+temp%10; j++; temp=temp/10; } } } for(i=0;i<max;i++) { a[i]=c[i]; c[i]=0; } n--; } for(i=max-1;i>=0;i--) { if(a[i]!=0) break; } for(;i>=0;i--) printf("%d",a[i]); printf("\n"); system("pause"); }
本文出自 “阿凡达” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/702538