ACM问题 我的代码那错了?? http://acm.swjtu.edu.cn/JudgeOnline/showproblem?problem_id=1655

http://acm.swjtu.edu.cn/JudgeOnline/showproblem?problem_id=1655我的代码:#include<iostream... http://acm.swjtu.edu.cn/JudgeOnline/showproblem?problem_id=1655
我的代码:
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
void del(char* a)
{
int len, i, j;
len = strlen(a);
i=j=0;
while(a[i]=='0')
i++;
while(i<len)
{
a[j]=a[i];
j++; i++;
}
a[j]='\0';
}
//高精度比较 a>b return 1, a==b return 0; a<b return -1;
int comp(char *a,char *b)
{
int i;
int h1=strlen(a);
int h2=strlen(b);
if(h1!=h2)
return (h1>h2)?1:-1;
for(i=h1-1;i>=0;i--)
if(a[i]!=b[i])
return (a[i]>b[i])?1:-1;
return 0;
}
int main()
{
char a[130],b[130];
int i,t,count;
cin>>t;
// getchar();
for(count=1;count<=t;count++)
{
cin>>a;
cin>>b;
// cout<<a<<" "<<b<<endl;
// cout<<a[0]<<" "<<b[0]<<endl;
if((a[0]=='+'&&b[0]=='-')||(a[0]!='+'&&a[0]!='-'&&b[0]=='-'))
{
cout<<"Test #"<<count<<": >"<<endl;
continue;
}
if(a[0]=='-'&&(b[0]=='+'||(b[0]!='+'&&b[0]!='-')))
{
cout<<"Test #:"<<count<<" <"<<endl;
continue;
}
if(a[0]=='+'&&b[0]=='+')
{
int h1=strlen(a);
for(i=0;i<=h1-2;i++)
a[i]=a[i+1];
a[h1-1]='\0';
del(a);
int h2=strlen(b);
for(i=0;i<=h2-2;i++)
b[i]=b[i+1];
b[h2-1]='\0';
del(b);// cout<<a<<" "<<b<<endl;
if(comp(a,b)>0)
cout<<"Test #"<<count<<": >"<<endl;
if(comp(a,b)<0)
cout<<"Test #"<<count<<": <"<<endl;
if(comp(a,b)==0)
cout<<"Test #"<<count<<": ="<<endl;
continue;
}
if((a[0]!='+'&&a[0]!='-'&&b[0]!='+'&&b[0]!='-'))
{
if(comp(a,b)>0)
cout<<"Test #"<<count<<": >"<<endl;
if(comp(a,b)<0)
cout<<"Test #"<<count<<": <"<<endl;
if(comp(a,b)==0)
cout<<"Test #"<<count<<": ="<<endl;
continue;
}
if(a[0]=='-'&&b[0]=='-') // 负数时注意
{
int h1=strlen(a);
for(i=0;i<=h1-2;i++)
a[i]=a[i+1];
a[h1-1]='\0';
del(a);
int h2=strlen(b);
for(i=0;i<=h2-2;i++)
b[i]=b[i+1];
b[h2-1]='\0';
del(b);
if(comp(a,b)>0)
cout<<"Test #"<<count<<": <"<<endl;
if(comp(a,b)<0)
cout<<"Test #"<<count<<": >"<<endl;
if(comp(a,b)==0)
cout<<"Test #"<<count<<": ="<<endl;
continue;
}
if(a[0]=='+'&&b[0]!='+'&&b[0]!='-')
{
int h=strlen(a);
for(i=0;i<=h-2;i++)
a[i]=a[i+1];
a[h-1]='\0';
del(a);
del(b);
// cout<<h<<" "<<a<<endl;
if(comp(a,b)>0)
cout<<"Test #"<<count<<": >"<<endl;
if(comp(a,b)<0)
cout<<"Test #"<<count<<": <"<<endl;
if(comp(a,b)==0)
cout<<"Test #"<<count<<": ="<<endl;
continue;
}
if(a[0]!='+'&&a[0]!='-'&&b[0]=='+')
{
int h=strlen(b);
for(i=0;i<=h-2;i++)
b[i]=b[i+1];
b[h-1]='\0';
del(a);
del(b);
if(comp(a,b)>0)
cout<<"Test #"<<count<<": >"<<endl;
if(comp(a,b)<0)
cout<<"Test #"<<count<<": <"<<endl;
if(comp(a,b)==0)
cout<<"Test #"<<count<<": ="<<endl;
}
}
return 0;
}
展开
 我来答
starfar1983
2010-12-29 · TA获得超过2258个赞
知道小有建树答主
回答量:692
采纳率:0%
帮助的人:1030万
展开全部
1楼说的很有道理。你的代码有点凌乱,用函数包装一部分功能,可能会好看很多,也更容易找出bug。
给段代码供参考,我没试过能不能AC。。

补充下:新代码能AC了。之前WA的原因是我用的是VC2008,char是有符号数。网上那个系统只有g++的编译器可选,而g++里把char当无符号数,导致输出错了。

#include <string.h>
#include <stdio.h>

int compare(const char *a, const char *b, int sa, int sb)
{
if (sa > sb)
return 1;
else if (sa < sb)
return -1;
int la = strlen(a);
int lb = strlen(b);
if (la > lb)
return sa;
else if (la < lb)
return -sa;
else
return strcmp(a, b) * sa;
}

char *format(char *a, int &s)
{
char *p = a;
while(*p=='+' || *p=='-' || *p=='0')
p++;
s = (*a == '-' && *p) ? -1 : 1;
return p;
}

int main()
{
int n, sa, sb;
scanf("%d", &n);

char r[3] = {'<', '=', '>'};
char a[128], b[128];
for (int i = 0; i < n; i++) {
scanf("%s%s", a+1, b+1);

char *pa = format(a+1, sa);
char *pb = format(b+1, sb);
printf("Test #%d: %c\n", i+1, r[compare(pa,pb,sa,sb) + 1]);
}

return 0;
}
qfyh05
2010-12-27 · TA获得超过507个赞
知道小有建树答主
回答量:325
采纳率:50%
帮助的人:359万
展开全部
你这样做很烦的。
你没有考虑-0与0的判断。
你应该建立一个函数处理数的,+的全部去掉+,-0=0。
然后在判断就方便很多了。。。。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式