您的位置:首页 > 其它

SGU112 - a^b-b^a

2013-03-08 19:18 561 查看
[b]112. ab-ba[/b]

time limit per test: 0.5 sec.
memory limit per test: 4096 KB

You are given natural numbers a and b. Find ab-ba.

Input

Input contains numbers a and b (1≤a,b≤100).

Output

Write answer to output.

Sample Input

2 3

Sample Output

-1
题解:高精度乘法和高精度减法。水水的。。。不过第五个数据WA了,不知道为什么,是用函数memcmp去判断两个数组所代表的数的大小,莫名其妙的出错了,然后果断自己写了个判断,然后提交上去就AC了。。。

View Code

#include<stdio.h>
#include<string.h>
#define MAXSN 1500
long x[MAXSN],y[MAXSN],temp[MAXSN];
long a,b;
int main(void)
{
long i,j,s,r,len1,len2,len;
scanf("%ld%ld",&a,&b);
memset(x,0,sizeof(x));
memset(y,0,sizeof(y));
x[0]=1;
for(i=1; i<=b; i++)
{
long c;
c=0;
for(j=0; j<MAXSN; j++)
{
s=x[j]*a+c;
x[j]=s%10;
c=s/10;
}
}
y[0]=1;
for(i=1; i<=a; i++)
{

long c;
c=0;
for(j=0; j<MAXSN; j++)
{
s=y[j]*b+c;
y[j]=s%10;
c=s/10;
}
}
len1=MAXSN-1;
while(x[len1]==0) len1--;
len2=MAXSN-1;
while(y[len2]==0) len2--;
if(len1<len2) len=len2;
else
len=len1;
if(len1!=len2)
r=len1<len2?-1:1;
else
{
for(i=len1; i>=0; i--)
if(x[i]!=y[i])
{
r=x[i]<y[i]?-1:1;
break;
}
}
if(r<0)
{
printf("-");
memcpy(temp,x,sizeof(x));
memcpy(x,y,sizeof(y));
memcpy(y,temp,sizeof(temp));
}

for(i=0; i<=len; i++)
{
x[i]=x[i]-y[i];
x[i+1]=x[i+1]+(x[i]>=0?1:0)-1;
x[i]=x[i]+(x[i]>=0?0:1)*10;
}
while(x[len]==0&&len>=1) len--;
for(i=len; i>=0; i--)
printf("%ld",x[i]);
printf("\n");
return 0;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: