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

 
  1. #include"stdio.h"
  2. #include"stdlib.h"
  3. #definemax500
  4. voidyiwei(int*a,intn,intm)
  5. {
  6. for(inti=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. voidmain()
  18. {
  19. inta[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. for(i=max-1;i>=0;i--)
  100. {
  101. if(a[i]!=0)
  102. break;
  103. }
  104. for(;i>=0;i--)
  105. printf("%d",a[i]);
  106. printf("\n");
  107. system("pause");
  108. }

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值