c++第1题 s2021dl61大小 时限:1s 空间:256m

代码前废话:因为最近那个某某某老师又出了亿些题目给我,导致更新下降,所以今天我来开一组有难度的题目

1、大小

【题目描述】

有两个正整数A和B。现在要在A的末尾添加X个0,要在B的末尾添加Y个0。问此时的A和B的大小关系,如果A大于B则输出‘>’,如果A等于B则输出‘=’,如果A小于B则输出‘<’。

【输入格式】

多组测试数据。

第一行,一个正整数G,表示有G组测试数据。1<=G<=1000。

第二行,两个整数,A和X。1<=A<=1000000,0<=X<=1000000。

第三行,两个整数,B和Y。1<=B<=1000000,0<=Y<=1000000。

【输出格式】

共G行,每行一个字符。

【输入样例】

5

2 1

19 0

10 2

100 1

1999 0

2 3

1 0

1 0

99 0

1 2

【输出样例】

>

=

<

=

<

方法一:暴力枚举(60分)

#include<bits/stdc++.h>
using namespace std;
long long a,b,y,x,g;
int main()
{
    cin>>g;
    for(int i=1;i<=g;i++)
    {
        cin>>a>>x;
        cin>>b>>y;
        for(int j=1;j<=x;j++)
        {
            a*=10;
        }
        for(int j=1;j<=y;j++)
        {
            b*=10;
        }
        if(a>b)cout<<">"<<endl;
        else if(a==b)cout<<"="<<endl;
        else cout<<"<"<<endl;
    }
    return 0;
}

方法二:“投机取巧”(100分)

#include<bits/stdc++.h>
using namespace std;
long long n,a,b,x,y,ka,sa[999999],kb,sb[999999],lena,lenb,p,l,ja,jb,suma,sumb,k;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		p=0;
		scanf("%d %d",&a,&x);
		scanf("%d %d",&b,&y);
		ka=0;
		for(;;)
		{
			ka++;
			sa[ka]=a%10;
			a/=10;
			if(a==0)break;
		}
		kb=0;
		for(;;)
		{
			kb++;
			sb[kb]=b%10;
			b/=10;
			if(b==0)break;
		}
		lena=x+ka;
		lenb=y+kb;
		p=0;
		if(lena>lenb)p=1;
		else if(lena<lenb)p=-1;
		else if(lena==lenb)
		{
			if(ka>kb)l=ka;
			else l=kb;
			k=1;
			ja=ka;
			jb=kb;
			suma=0;
			sumb=0;
			for(int j=1;j<=l;j++)
			{
				if(ja<1)suma=suma*k;
				else suma=suma*k+sa[ja];
				if(jb<1)sumb=sumb*k;
				else sumb=sumb*k+sb[jb];
				k=k*10;
				ja--;
				jb--;
			}
			if(suma>sumb)p=1;
			else if(suma<sumb)p=-1;
			else p=0;
		}
		if(p==1)printf(">\n");
		else if(p==-1)printf("<\n");
		else if(p==0)printf("=\n");
		memset(sa,0,sizeof(sa));
		memset(sb,0,sizeof(sb));
	}    
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值