高精度...
考验代码能力...
贴上代码(囧):
#include <stdio.h>
#include <string.h>
struct bignum
{
int s[500];
}A, B;
typedef struct bignum bignum;
bignum time(bignum A, bignum B)
{
bignum C = {0};
int i, j;
for(i = 1; i <= A.s[0]; ++i)
for(j = 1; j <= B.s[0]; ++j)
{
C.s[i + j - 1] += A.s[i] * B.s[j];
C.s[i + j] += C.s[i + j - 1] / 10;
C.s[i + j - 1] %= 10;
}
if(C.s[A.s[0] + B.s[0]] > 0) C.s[A.s[0] + B.s[0]] %= 10, C.s[0] = A.s[0] + B.s[0];
else C.s[0] = A.s[0] + B.s[0] - 1;
return C;
}
bignum calc(int a, int p, bignum X)
{
bignum T = {0};
X.s[++X.s[0]] = 1;
while(a)
{
T.s[++T.s[0]] = a % 10;
a /= 10;
}
while(p)
{
if(p & 1)
X = time(X, T);
T = time(T, T);
p >>= 1;
}
return X;
}
void print(bignum C)
{
int i;
for(i = C.s[0]; i >= 1; --i)
printf("%d", C.s[i]);
}
bignum minus(bignum A, bignum B)
{
int i;
for(i = 1; i <= B.s[0]; ++i)
if(A.s[i] - B.s[i] < 0)
{
A.s[i] += 10 - B.s[i];
A.s[i + 1] -= 1;
}
else
A.s[i] -= B.s[i];
while(A.s[i] < 0)
{
A.s[i] += 10;
A.s[i + 1] -= 1;
++i;
}
for(i = 204; i >= 1; --i)
if(A.s[i] > 0) break;
A.s[0] = i;
return A;
}
int main()
{
int a, b;
int i;
scanf("%d%d", &a, &b);
A = calc(a, b, A);
B = calc(b, a, B);
if(A.s[0] < B.s[0])
{
putchar('-');
print(minus(B, A));
}
else if(A.s[0] == B.s[0])
{
for(i = A.s[0]; i >= 1; --i)
if(A.s[i] > B.s[i])
{
print(minus(A, B));
break;
}
else if(A.s[i] < B.s[i])
{
putchar('-');
print(minus(B, A));
break;
}
if(i == 0)
putchar('0');
}
else
print(minus(A, B));
return 0;
}