题目描述:设有n个正整数,将它们连接成一排,组成一个最小的多位整数
程序输入:n个数
程序输出:连接成的多位数
例如:
n=2时,2个整数32,321连接成的最小整数为:32132
n=4时,4个整数55,31,312,33连接成的最小整数为:312313355
实现代码如下:
#include <iostream>
#include <string>
using namespace std;
//将整数转换成字符串来比较
int cmp(char* strA,char* strB){
string sa=strA;
string sb=strB;
string x=sa+sb;
string y=sb+sa;
if(x>y)
return 1;
else if(x==y)
return 0;
else
return -1;
}
//交换数据
void swap(int &x,int &y)
{
int temp=x;
x=y;
y=temp;
}
//冒泡排序
void sort(int input[],int n)
{
char stra[10];
char strb[10];
int i,j;
for(i=0;i<n-1;i++){
for(j=0;j<n-1-i;j++){
itoa(input[j],stra,10);//这里也可以用sprinf将整数转成字符串
itoa(input[j+1],strb,10);//itoa并不是标准的C库函数,sprintf可以跨平台
//if(input[j]>input[j+1]){//把最大的数据交换到最末端,按从小到大排序
if(cmp(stra,strb)==1){
swap(input[j],input[j+1]);
}
}
}
}
void main(){
int i,n;
cout<<"input n:";
cin>>n;
int *dat=new int[n];
for(i=0;i<n;i++){
cout<<"input data "<<i<<" value:";
cin>>dat[i];
}
sort(dat,n);
for(i=0;i<n;i++){
cout<<dat[i];
}
delete [] dat;
}
题目:在字符串中找出连续最长的数字串的长度
例如:
输入abcd1234abd123abcd123456,输入为123456
代码如下:
#include <iostream>
using namespace std;
//找一个字符串中最长的连接数字串
int maxStrNum(const char *inputstr,char *outputstr){
int i,j,cur=0,max=0;
int len=strlen(inputstr);
char temp[10]={0};
//char ret[10]={0};
char *ret=outputstr;//直接改outputstr地址的内容,不然返回主函数就是空
//char *temp=0,*ret=0;
for(i=0;i<len;i++){
while(inputstr[i]>='0' && inputstr[i]<='9'){
temp[cur]=inputstr[i];
cur++;
i++;
}
//temp[cur]='\0';
if(max<cur){
max=cur;
for(j=0;j!=strlen(temp);j++){
ret[j]=temp[j];
}
ret[j]='\0';
}
if(cur>0){
memset(temp,0,10);
cur=0;
}
}
//outputstr=ret;
return max;
}
void main(){
char *input="abcd1234abd123abcd123456";
char out[10]={0};
int ret=maxStrNum(input,out);
cout<<out<<" "<<ret<<endl;
}