题意:比较两个给出的数字的大小,然后给出相应的大小于符号,注意有些数据有前导零。
题解:由于数据的范围过大,只能用字符串输入来比较。这里有两种解法:一是字符串转化为整型数组,去除前导零,再逐个比较:二是加前导零是两个字符串长度相等,然后再利用字典树比较,直接得出结果。(加前导零的时候需要逆序,比较的时候需要正序)
解法一:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
#include<cstdlib>
#include<string>
#define inf 9999999.9
#define maxn 1000010
using namespace std;
char s1[maxn],s2[maxn];
int a[maxn],b[maxn];
int main()
{
while(~scanf("%s",s1))
{
int m,n;
int fg=0;
scanf("%s",s2);
int l1=strlen(s1);
int l2=strlen(s2);
for(int i=0;i<=max(l1,l2);i++)
{
a[i]=s1[i]-'0';
b[i]=s2[i]-'0';
}
for(int i=0;i<=l1;i++)
{
if(a[i]!=0)
{
m=i;
break;
}
}
for(int i=0;i<=l2;i++)
{
if(b[i]!=0)
{
n=i;
break;
}
}
/*for(int i=m;i<l1;i++)
printf("%d",a[i]);
for(int i=n;i<l2;i++)
printf("%d",b[i]);*/
if(l1-m>l2-n)
{
fg=1;
printf(">\n");
}
else
if(l1-m<l2-n)
{
fg=1;
printf("<\n");
}
else
{
for(int i=m,j=n;i<l1;i++,j++)
{
if(a[i]>b[j])
{
fg=1;
printf(">\n");
break;
}
else
if(a[i]<b[j])
{
fg=1;
printf("<\n");
break;
}
}
}
if(!fg)
printf("=\n");
}
return 0;
}
解法二:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
#include<cstdlib>
#include<string>
#define inf 9999999.9
#define maxn 1000010
using namespace std;
char s1[maxn],s2[maxn];
char s3[maxn],s4[maxn];
int a[170],b[170];
int main()
{
while(~scanf("%s",s1))
{
scanf("%s",s2);
int l1=strlen(s1);
int l2=strlen(s2);
int len1=0,len2=0;
if(l1!=l2)
{
if(l1>l2)
{
for(int i=l1,j=l2;i>=0;i--,j--)
{
s3[len1++]=s1[i];
if(j>=0)
s4[len2++]=s2[j];
else
s4[len2++]='0';
}
}
if(l1<l2)
{
for(int i=l1,j=l2;j>=0;i--,j--)
{
s4[len2++]=s2[j];
if(i>=0)
s3[len1++]=s1[i];
else
s3[len1++]='0';
}
}
for(int i=max(l1,l2),j=0;i>=0;i--,j++)
{
s1[j]=s3[i];
s2[j]=s4[i];
}
}
if(strcmp(s1,s2)>0)
printf(">\n");
else
if(strcmp(s1,s2)<0)
printf("<\n");
else
if(strcmp(s1,s2)==0)
printf("=\n");
}
return 0;
}