最大整数问题

 

问题描述:  设有n个正整数,将它们连接成一排,组成一个最大的多位整数.

                    例如:n=3时,3个整数13,312,343,连成的最大整数为:34331213;

                    n=4时,4个整数7,13,4,246连接成的最大整数为7424613。
            
输入:第1行有一个正整数n,代表数据的个数;接下来一行为这n个具体的数字。
       
输出:输出连接成的最大多位数。

 

c++

/*①题目涉及数字的连接,可考虑把数字转换为字符串来处理,并且纯数字的字符串很容易拼接和比较大小。
   ②在此题中,对于字符串a,b,如果a+b>b+a,则可认为a>b。因为本题数的大小侧重在数字的最高数位上,
       应该将最高数位大的那个数放在前面,而a+b和b+a这两个字符串的位数相同,如果a+b>b+a,那么肯定
       a的最高数位大于b的最高数位。(若最高位相同,则比较下一位,以此类推)
   ③对各个数字(字符串)进行排序(插入排序,选择排序,冒泡排序等)
*/

#include<iostream> 
#include<string>

using namespace std;

int main(){
	int n;
	cout << "请输入数字的个数:" << endl;
	cin >> n;
	string str[100];
	cout << "分别输入各个数字:" << endl;
	for (int i = 0; i < n; i++)
		cin >> str[i];
	for (int i = 0; i < n - 1; i++) {   //从第一个数字(字符串)开始,将它依次与其余的字符串做比较,然后选择较大的放在前面,
		                                        //与冒泡排序类似,不过冒泡排序刚好是将大的放在后面
		for (int j = i + 1; j < n; j++) {
			if (str[j] + str[i] > str[i] + str[j]){   //"+"号可直接连接两个字符串,字符串的大小比较是自左向右逐个字符相比(按ASCII值大小相比较),
				                                         //(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止。				
				string s;
				s = str[i];
				str[i] = str[j];       
				str[j] = s;
			}
		}
	}
	for (int i = 0; i < n; i++)
		cout << str[i];
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值