题目描述
对于任意两个正整数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;
}