大数比较大小

来源:互联网 发布:js配置文件怎么写 编辑:程序博客网 时间:2024/05/17 07:25

比较大小和排序可以说是编程比较常见的问题,并且对于比较小的数来比较大小(数值不超过数据类型的范围),用编程是很容易实现的,但是当数非常大的时候,比如超过了1000位,我们应该如何处理呢?

描述

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

比如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  222222220 0
样例输出
a>ba<b
当看到这个题的时候,我首先想到的是利用数组,然后再把数分为几种情况,进行比较。

自己写的代码(有点长)

#include<stdio.h>
#include<string.h>
int main(void)
{

int i,j,k,c;
while(1)
{
char a[2000];
c=0;
gets(a);
if(a[0]=='0'&&a[2]=='0')
return 0;
for(int i=0;i<strlen(a);i++)
if(a[i]!=' ')
c++;
else
break;
if(a[0]=='-'&&a[c+1]!='-')
printf("a<b\n");
else if(a[0]!='-'&&a[c+1]=='-')
printf("a>b\n");
else if(a[0]!='-'&&a[c+1]!='-')
{
if(c<(strlen(a)-c-1))
                 printf("a<b\n");
else if(c>(strlen(a)-c-1))
printf("a>b\n");
else
for(j=0,k=c+1;j<c,k<strlen(a);j++,k++)
{
if(a[j]-'0'>a[k]-'0')
{
printf("a>b\n");
break;
}
else 
if(a[j]-'0'<a[k]-'0')
{
printf("a<b\n");
break;
}

}
if(j>=c&&k>=strlen(a))


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

}
}
else if(a[0]=='-'&&a[c+1]=='-')
{
if(c<(strlen(a)-c-1))
                 printf("a>b\n");
else if(c>(strlen(a)-c-1))
printf("a<b\n");
else
for(j=1,k=c+2;j<c,k<strlen(a);j++,k++)
{
if(a[j]-'0'>a[k]-'0')
{
printf("a<b\n");
break;
}
else if(a[j]-'0'<a[k]-'0')
{
printf("a>b\n");
break;
}

}
               if(j>=c&&k>=strlen(a))
{
printf("a==b\n");

}
}
}
return 0;
}

最优代码(使用c++写的)

01.#include<iostream>
02.#include<string>
03.using namespace std;
04. 
05.int main()
06.{
07.string a,b;
08.while(cin>>a>>b)
09.{
10.if(a=="0"&&b=="0")
11.return 0;
12.if(a==b)
13.cout<<"a==b"<<endl;
14.else if(a[0]=='-'&&b[0]=='-')
15.{
16.if(a.substr(1,string::npos)>b.substr(1,string::npos)||a.length()>b.length())
17.cout<<"a<b"<<endl;
18.else cout<<"a>b"<<endl;
19.}
20.else if(a>"0"&&b>"0"||a<"0"&&b<"0"&&a.length()>b.length()||a>b)
21.cout<<"a>b"<<endl;
22.else if(a<"0"&&b>"0"&&a.length()>b.length()||a>b)
23.cout<<"a<b"<<endl;
24. 
25.}
26.}
















0 0
原创粉丝点击