输入m个正整数,然后把这m个正整数分别从低位往高位看,又形成了m个正整数(保证不会超出int范围),把这2m个正整数取出两个相除,希望得到的商最大,这个商是多少?(内存限制: 4096 KB)

23 篇文章 0 订阅

#include<iostream,>
#include<cmath.>
#include<math.h.>
using namespace std;
int f(int a) //调用函数判断整数位数
{
int x=0;
for (;;)
{
if (a / 10 < 1)
{
x++;
break;
}
a = a / 10;
x++;
}
return x;
}
int main()
{
int n;
cin >> n;
while (n–)
{
int m;
cin >> m;
int a, b, max = 0, min = 2147483647; //2147483647为int型范围最大值
for (int i = 0;i < m;i++)
{
cin >> a;
int u = f(a);int v = 0;int x = a;
for (int i = u - 1;i >= 0;i–) //逐个把数字从低位往高位看,形成m个整数,边输边存
{
v += (x % 10) * pow(10, i);
if (x / 10 >= 1)
{
x = x / 10;
}
else if (x / 10 < 1)
{
break;
}
}
b = v;
if (a > b)//找出2m个整数中的最大值和最小值
{
if (a > max)
{
max = a;
}
if (b < min)
{
min = b;
}
}
else
{
if (b > max)
{
max = b;
}
if (a < min)
{
min = a;
}
}
}
cout << max / min << endl;//最大值和最小值相除得最大商
}
return 0;
}

由于内存限制,此题应该不能够使用数组来解,否则会超内存
若无这么小的内存限制,可直接开数组存数字更为方便,最后逐个比较或排序获得最大最小值,从而求出最大商。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值