【大数比较】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
 1 //NYOJ-比大小

 2 //大数模板

 3 #include<cstring> 

 4 #include<iomanip> 

 5 #include<algorithm> 

 6 #include<cstdio>

 7 using namespace std; 

 8 #define MAXN 9999

 9 #define MAXSIZE 10

10 #define DLEN 4

11 char str1[1002],str2[1002];

12 class BigNum

13 { 

14     private: 

15         int a[500];    

16         int len;      

17     public: 

18         BigNum(){ len = 1;memset(a,0,sizeof(a)); }  

19         BigNum(const char*);    

20         bool operator > (const BigNum & T)const;  

21 }; 

22 BigNum::BigNum(const char*s){

23     int t,k,index,l,i;

24     memset(a,0,sizeof(a));

25     l=strlen(s);   

26     len=l/DLEN;

27     if(l%DLEN)

28         len++;

29     index=0;

30     for(i=l-1;i>=0;i-=DLEN)

31     {

32         t=0;

33         k=i-DLEN+1;

34         if(k<0)

35             k=0;

36         for(int j=k;j<=i;j++)

37             t=t*10+s[j]-'0';

38         a[index++]=t;

39     }

40 }

41 bool BigNum::operator>(const BigNum & T) const

42 { 

43     int ln;

44     if(len > T.len)

45         return true; 

46     else if(len == T.len)

47     { 

48         ln = len - 1; 

49         while(a[ln] == T.a[ln] && ln >= 0)

50             ln--; 

51         if(ln >= 0 && a[ln] > T.a[ln])

52             return true; 

53         else

54             return false; 

55     } 

56     else

57         return false; 

58 }

59     

60 int main(){

61     while(~scanf("%s %s",str1,str2)){

62         if(str1[0]=='0' && str2[0]=='0'){

63             break;

64         }

65         BigNum big1(str1);

66         BigNum big2(str2);

67         if(strcmp(str1,str2) == 0){

68             printf("a==b\n");

69         }else if(str1[0] == '-' && str2[0] == '-'){

70             big1 > big2 ? printf("a<b\n") : printf("a>b\n");

71         }else if(str1[0] == '-' && str2[0] != '-'){

72             printf("a<b\n");

73         }else if(str2[0] == '-' && str1[0] != '-'){

74             printf("a>b\n");

75         }else{

76             big1 > big2 ? printf("a>b\n") : printf("a<b\n");    

77         }        

78     }

79     return 0;

80 }
 1 //最优解

 2 #include<iostream>

 3 #include<string>

 4 using namespace std;

 5 

 6 int main()

 7 {

 8     string a,b;    

 9     while(cin>>a>>b)

10     {

11         if(a=="0"&&b=="0")

12             return 0;

13         if(a==b)

14             cout<<"a==b"<<endl;

15         else if(a[0]=='-'&&b[0]=='-')

16             {

17                 if(a.substr(1,string::npos)>b.substr(1,string::npos)||a.length()>b.length())

18                     cout<<"a<b"<<endl;

19                 else cout<<"a>b"<<endl;

20             }

21         else if(a>"0"&&b>"0"||a<"0"&&b<"0"&&a.length()>b.length()||a>b)

22                 cout<<"a>b"<<endl;

23         else if(a<"0"&&b>"0"&&a.length()>b.length()||a>b)

24                 cout<<"a<b"<<endl;

25         

26     }

27 }  

 

你可能感兴趣的:(比较)