编程题13 - 循环数比较(爱奇艺)

题目描述

对于任意两个正整数x和k,我们定义repeat(x, k)为将x重复写k次形成的数,例如repeat(1234, 3) = 123412341234,repeat(20,2) = 2020.
牛牛现在给出4个整数x1, k1, x2, k2, 其中v1 = (x1, k1), v2 = (x2, k2),请你来比较v1和v2的大小。

输入描述:

输入包括一行,一行中有4个正整数x1, k1, x2, k2(1 ≤ x1,x2 ≤ 10^9, 1 ≤ k1,k2 ≤ 50),以空格分割

输出描述:

如果v1小于v2输出"Less",v1等于v2输出"Equal",v1大于v2输出"Greater".

示例1

输入

1010 3 101010 2

输出

Equal

思路:

1. 求出x1,x2的位数

2. 比较(位数 * 循环次数)的大小,

3. 步骤2中大小相等,依次比较形成的循环数每一位的大小(j1/t1获得每一位的大小,j1%t1,t1/10获得下一次要比较的数据)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
	int i;
	int k1 = 0, k2 = 0, x1 = 0, x2 = 0, n1 = 0, n2 = 0; // n1,n2 x1 x2的位数
    int j1,j2;
	int temp = 1, temp1 = 1, temp2 = 1; // temp1,temp2 去做除法和余数运算的值
	int t1 = 0, t2 = 0;
	scanf("%d", &x1);
	scanf("%d", &k1);
	scanf("%d", &x2);
	scanf("%d", &k2);

	for (i = 1; i < 11; i++)
	{
		if (x1 / temp > 0)
		{
			n1 = i;
		}
		else
		{
			break;
		}
		temp = (temp * 10);
	}
	temp = 1;
	for (i = 1; i < 11; i++)
	{
		if (x2 / temp > 0)
		{
			n2 = i;
		}
		else
		{
			break;
		}
		temp = (temp * 10);
	}

	for (i = 1; i < n1; i++)
	{
		temp1 = temp1 * 10;
	}
	for (i = 1; i < n2; i++)
	{
		temp2 = temp2 * 10;
	}
	if (n1 * k1 > n2 * k2)
	{
		printf("Greater");
		return 0;
	}
	else if (n1 * k1 < n2 * k2)
	{
		printf("Less");
		return 0;
	}
	else
	{
        j1 = x1;
        j2 = x2;
		for (i = 0; i < n1 * k1; i++)
		{

            if (t1 == 0)
			{
				t1 = temp1;
                j1 = x1;
			}
			if (t2 == 0)
			{
				t2 = temp2;
                j2 = x2;
			}

			if ((j1 / t1) > (j2 / t2))
			{
				printf("Greater");
				return 0;
			}
			if ((j1 / t1) < (j2 / t2))
			{
				printf("Less");
				return 0;
			}
			else
			{
				j1 = j1 % t1;
				j2 = j2 % t2;
				t1 = t1 / 10;
				t2 = t2 / 10;
			}
		}
	}
	printf("Equal");
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值