现在的位置: 首页 > 综合 > 正文

C语言计算任意数的任意次方

2017年12月19日 ⁄ 综合 ⁄ 共 2515字 ⁄ 字号 评论关闭

 

 

 

  1. #include "stdio.h"  
  2. #include"stdlib.h"  
  3. #define max 500  
  4. void yiwei(int *a,int n,int m)  
  5. {  
  6.     for(int i=m-1;i>=0;i--)  
  7.     {  
  8.         if(i-n>=0)  
  9.         {  
  10.             a[i]=a[i-n];  
  11.             //a[i-n]=0;  
  12.         }  
  13.         else 
  14.             a[i]=0;  
  15.     }  
  16. }  
  17. void main()  
  18. {  
  19.     int a[max],bb[max],b[max][max],c[max],m,n,temp,i,j,k;  
  20.     scanf("%d%d",&m,&n);  
  21.     printf("提示:默认结果不超过500位,如果超过500位则出错!\n");  
  22.     printf("%d的%d次方:",m,n);  
  23.     for(i=0;i<max;i++)  
  24.     {  
  25.         a[i]=0;  
  26.         c[i]=0;  
  27.         for(j=0;j<max;j++)  
  28.             b[i][j]=0;  
  29.     }  
  30.     if(m<10)  
  31.         a[0]=m;  
  32.     else 
  33.     {  
  34.         temp=m;  
  35.         j=0;  
  36.         while(temp!=0)  
  37.         {  
  38.             a[j]=temp%10;  
  39.             temp=temp/10;  
  40.             j++;  
  41.         }  
  42.     }  
  43.     //////  
  44.     //m=16;126  
  45.     while (n>1)  
  46.     {  
  47.         for(i=0;i<max;i++)  
  48.             for(j=0;j<max;j++)  
  49.                 b[i][j]=0;  
  50.             for(i=0;i<max;i++)  
  51.                 bb[i]=a[i]*m;  
  52.             for(i=0;i<max;i++)  
  53.                 if(bb[i]<10)  
  54.                     b[i][0]=bb[i];  
  55.                 else 
  56.                 {  
  57.                     temp=bb[i];  
  58.                     for(j=0;j<max;j++)  
  59.                     {  
  60.                         b[i][j]=temp%10;  
  61.                         temp=temp/10;  
  62.                     }  
  63.                 }  
  64.                 for(i=0;i<max;i++)  
  65.                 {  
  66.                     yiwei(b[i],i,max);  
  67.                 }  
  68.                 //右加  
  69.                 for(i=0;i<max;i++)  
  70.                 {  
  71.                     for(j=0;j<max;j++)  
  72.                         c[i]=c[i]+b[j][i];  
  73.                 }  
  74.                 //c移位  
  75.                 for(i=0;i<max;i++)  
  76.                 {  
  77.                     if(c[i]>=10)  
  78.                     {  
  79.                         temp=c[i];  
  80.                         j=i;  
  81.                         while(temp!=0)  
  82.                         {  
  83.                             if(j==i)  
  84.                                 c[j]=temp%10;  
  85.                             else 
  86.                                 c[j]=c[j]+temp%10;  
  87.                             j++;  
  88.                             temp=temp/10;  
  89.                         }  
  90.                     }  
  91.                 }  
  92.                 for(i=0;i<max;i++)  
  93.                 {  
  94.                     a[i]=c[i];  
  95.                     c[i]=0;  
  96.                 }  
  97.                 n--;  
  98.     }  
  99.       
  100.     for(i=max-1;i>=0;i--)  
  101.     {  
  102.         if(a[i]!=0)  
  103.             break;  
  104.     }  
  105.     for(;i>=0;i--)  
  106.         printf("%d",a[i]);  
  107.     printf("\n");  
  108.     system("pause");  
  109. }  
  110.  

 

本文出自 “阿凡达” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/702538

抱歉!评论已关闭.