zoukankan      html  css  js  c++  java
  • 51Nod

    51Nod - 1097 拼成最小的数

    设有n个正整数,将它们联接成一排,组成一个最小的多位整数。
     
     
    例如:
    n=2时,2个整数32,321连接成的最小整数为:32132,
    n=4时,4个整数55,31,312, 33 联接成的最小整数为:312313355
    Input
    第1行:1个数N。(2 <= N <= 10000)
    第2 - N + 1行:每行1个正整数。(1 <= A[i] <= 10^9)
    Output
    输出拼在一起的最小整数。由于数据量太大,请以1000个字符为单位,输出到一行里,最终剩余的不足1000个字符的部分,输出到单独1行。
    Input示例
    4
    55
    31
    312
    33
    Output示例
    312313355

    题解: 

      比较两个数的合成和最小序,直接将两个数字合成,再比较。 使用函数 int(log10(x)) + 1 来求 x 的位数。 

      最后没有注意到需要逐步输出,到时提交了wa。 

    #include <iostream> 
    #include <cstdio> 
    #include <string>
    #include <vector> 
    #include <algorithm> 
    using namespace std; 
    
    bool MyCmp(int a, int b){ 
    	int aa = int(log10(a)) + 1;  
    	int bb = int(log10(b)) + 1;  
    	return (long long)(a + b*pow(10,aa)) > (long long)(b + a*pow(10,bb)); 
    }
    
    int main(){
    	int n, num; 
    	vector<int> vt; 
    	cin>>n; 
    	for(int i=0; i<n; ++i){
    		cin>>num; 
    		vt.push_back(num); 
    	}
    	sort(vt.begin(), vt.end(), MyCmp); 
    
    	string ans = ""; 
    	for(int i=0; i<n; ++i){
    		ans += to_string(vt[i]); 
    	}
    
    	for(int i=0; i<ans.length(); ++i){
    		if(i!=0 && i%1000==0){
    			cout << endl; 
    		}
    		cout << ans[i]; 
    	}
    	cout << endl; 
    	return 0; 
    }
    

      

  • 相关阅读:
    DNS服务器原理简述、搭建主/从DNS服务器并实现智能解析
    JQuery02
    JQuery01
    python05
    python04
    python03
    Liunx命令
    Python运算符及注释
    python01
    原生JDBC+mybatis
  • 原文地址:https://www.cnblogs.com/zhang-yd/p/6875538.html
Copyright © 2011-2022 走看看