关于使用数组来存大数的一些技巧。
下边以a的32次幂来举个栗子。
#include <bits/stdc++.h>
using namespace std;
int a[100000];
int main()
{
int t, n, i, j, k, cas = 1;
scanf("%d", &t);
while(t--)
{
scanf("%d", &n);
memset(a, 0, sizeof(a));
int top = 0;
a[top++] = 1;
int x, y, c;
for(i = 0; i < n; i++) // 32的多少次幂
{
c = 0; //进位数
for(j = 0; j < top; j++)
{
x = a[j] * 32 + c; //计算当前位的乘积;
y = x % 10000; //计算后的值通过取模10000得到;
c = x / 10000;//得到进位数;
a[j] = y;
}
if(c)
{
a[top++] = c;
}
}
printf("Case #%d: ", cas++);
for(k = top - 1; k >= 0; k--)
{
if(k != top - 1)
printf("%04d", a[k]); //要进行补0, 比如10000 % 10000,你应该存进去的是0000, 而你存进去的只有0;
else printf("%d", a[k]);
}
printf("\n");
}
return 0;
}
我这里用每个数组存的只有4位,其实你也可以存5位,存6位,只要把对应的10000改为100000,1000000即可,补零时改为%05d,%06d.