求 a^b(数学)

来源:互联网 发布:linux网卡配置文件路径 编辑:程序博客网 时间:2024/05/17 01:12

 数据量很大时  long long中间也会溢出  所以要拆分开来做

 1  # include <stdio.h> 2  # include <string.h> 3  # define LL long long 4   5  LL i, len, n, m; 6  LL a[110]; 7   8  void f(int n) 9  {10      for(i = 0; i < len; i++)11          a[i] *= n;12      for(i = 0; i < len+100; i++)13      {14          a[i+1] += a[i]/10;15          a[i] %= 10;16      }17      for(i = len+100; i >= 0; i--)18      {19          if(a[i] != 0)20              break;21      }22      len = i+1;23  }24  25  int main(void)26  {27      int p;28      scanf("%d", &p);29      while(p--)30      {31          scanf("%lld%lld", &n, &m);32          if(m == 1)33              printf("\n", n);34          else if(n == 0)35              printf("0\n");36          else if(n == 1)37              printf("1\n");38          else if(n < 0)39          {40              if(m % 2 == 1)41                  printf("-");42              n = -n;43          }44          memset(a, 0, sizeof(a));45          a[0] = 1;46          len = 1;47          for(int i = 1; i <= m; i++)48              f(n);49          for(i = len-1; i >= 0; i--)50              printf("%lld", a[i]);51          printf("\n");52      }53  54      return 0;55  }
View Code

 

0 0