- #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