【大数比较】NYOJ-73

时间:2023-03-09 19:33:20
【大数比较】NYOJ-73

比大小

时间限制:3000 ms  |  内存限制:65535 KB
难度:2
描述

给你两个很大的数,你能不能判断出他们两个数的大小呢?

比如123456789123456789要大于-123456

输入
每组测试数据占一行,输入两个不超过1000位的10进制整数a,b
数据保证输入的a,b没有前缀的0。
如果输入0 0表示输入结束。测试数据组数不超过10组
输出
如果a>b则输出“a>b”,如果a<b则输出“a<b”,如果相等则输出“a==b”。
样例输入
111111111111111111111111111 88888888888888888888
-1111111111111111111111111 22222222
0 0
样例输出
a>b
a<b
 //NYOJ-比大小
//大数模板
#include<cstring>
#include<iomanip>
#include<algorithm>
#include<cstdio>
using namespace std;
#define MAXN 9999
#define MAXSIZE 10
#define DLEN 4
char str1[],str2[];
class BigNum
{
private:
int a[];
int len;
public:
BigNum(){ len = ;memset(a,,sizeof(a)); }
BigNum(const char*);
bool operator > (const BigNum & T)const;
};
BigNum::BigNum(const char*s){
int t,k,index,l,i;
memset(a,,sizeof(a));
l=strlen(s);
len=l/DLEN;
if(l%DLEN)
len++;
index=;
for(i=l-;i>=;i-=DLEN)
{
t=;
k=i-DLEN+;
if(k<)
k=;
for(int j=k;j<=i;j++)
t=t*+s[j]-'';
a[index++]=t;
}
}
bool BigNum::operator>(const BigNum & T) const
{
int ln;
if(len > T.len)
return true;
else if(len == T.len)
{
ln = len - ;
while(a[ln] == T.a[ln] && ln >= )
ln--;
if(ln >= && a[ln] > T.a[ln])
return true;
else
return false;
}
else
return false;
} int main(){
while(~scanf("%s %s",str1,str2)){
if(str1[]=='' && str2[]==''){
break;
}
BigNum big1(str1);
BigNum big2(str2);
if(strcmp(str1,str2) == ){
printf("a==b\n");
}else if(str1[] == '-' && str2[] == '-'){
big1 > big2 ? printf("a<b\n") : printf("a>b\n");
}else if(str1[] == '-' && str2[] != '-'){
printf("a<b\n");
}else if(str2[] == '-' && str1[] != '-'){
printf("a>b\n");
}else{
big1 > big2 ? printf("a>b\n") : printf("a<b\n");
}
}
return ;
}
 //最优解
#include<iostream>
#include<string>
using namespace std; int main()
{
string a,b;
while(cin>>a>>b)
{
if(a==""&&b=="")
return ;
if(a==b)
cout<<"a==b"<<endl;
else if(a[]=='-'&&b[]=='-')
{
if(a.substr(,string::npos)>b.substr(,string::npos)||a.length()>b.length())
cout<<"a<b"<<endl;
else cout<<"a>b"<<endl;
}
else if(a>""&&b>""||a<""&&b<""&&a.length()>b.length()||a>b)
cout<<"a>b"<<endl;
else if(a<""&&b>""&&a.length()>b.length()||a>b)
cout<<"a<b"<<endl; }
}