求 a^b(数学)

 数据量很大时  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

 

posted @ 2013-08-08 20:46  GLSilence  阅读(194)  评论(0编辑  收藏  举报