2011年11月7日星期一

POJ 1504 字符串处理


感觉这题就是atoi和itoa的重复使用。。。。不过思路还是蛮清晰的
但看了discuss之后发觉弱爆了 = =

char* a[M],b[M],sum[M];存储输入的两个正整数,然后去除a,b中的前导0和后缀0,下标由0开始由低到高带进位相加存放在sum中,再去除sum中的前导0和后缀0,然后输出就行了。因为 反转(反转(a))=a,所以这里就是改变了一下加法的规则。
这题比较好的解法,如果是模拟的话还要考虑数据溢出问题。用这个方法可以直接上高精度。嗯,很好~

还有strrev函数、、、囧,各种方便。。。。



#include
#include
#include
void swap(char *p,int len)
{
for(int i = 0;i < len / 2;i ++){
p[i] ^= p[len - 1 - i];
p[len - 1 - i] ^= p[i];
p[i] ^= p[len - 1 - i];
}
}
int main()
{
int n;
scanf("%d",&n);
while(n --){
char a[15]={'\0'},b[15]={'\0'},sum[15]={'\0'};
int c,d;
scanf("%s%s",a,b);
c = atoi(a);
d = atoi(b);
_itoa(c,a,10);    //用itoa还不行,必须用_itoa
_itoa(d,b,10);
swap(a,strlen(a));
swap(b,strlen(b));
_itoa(atoi(a) + atoi(b),sum,10);
swap(sum,strlen(sum));
printf("%d\n",atoi(sum));
}
return 0;
}

没有评论:

发表评论