[关闭]
@Moritz 2019-03-30T03:36:09.000000Z 字数 783 阅读 502

P1012 拼数

洛谷 字符串 C++ 所有文稿


题目描述

设有个正整数,将它们联接成一排,组成一个最大的多位整数。

例如:时,3个整数联接成的最大整数为:

又如:时,4个整数联接成的最大整数为:

输入输出格式

输入格式:

第一行,一个正整数

第二行,个正整数。

输出格式:

一个正整数,表示最大的整数

输入输出样例

输入样例#1

  1. 3
  2. 13 312 343

输出样例#1

  1. 34331213

排序,然后输出,但存在一种特殊情况,不能直接用>,所以写了一个函数

  1. /*可以判断长度后交换以简化*/
  2. bool sort2(string s1,string s2){
  3. if (s1.length()<s2.length()){
  4. if(s2.compare(0,s1.length(),s1)==0){
  5. for(int i=s1.length();i<s2.length();i++){
  6. if (s1[i-s1.length()]>s2[i]) return true;
  7. else return false;
  8. }
  9. }
  10. else return (bool)(s1>s2);
  11. }
  12. else if (s1.length()>s2.length()){
  13. if(s1.compare(0,s2.length(),s2)==0){
  14. for(int i=s2.length();i<s1.length();i++){
  15. if (s2[i-s2.length()]>s1[i]) return false;
  16. else return true;
  17. }
  18. }
  19. else return (bool)(s1>s2);
  20. }
  21. else return (bool)(s1>s2);
  22. return true;
  23. }

后来,发现可以这样写

  1. bool sort2(string s1,string s2){
  2. return s1+s2>s2+s1;
  3. }

长见识了。


2019.3.30

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注