您的位置:首页 > 编程语言 > C语言/C++

C++编程题1——输入字符串,输出数字最小的值

2017-09-16 11:07 841 查看
题目描述:

输入不限长度的字符数字,经过函数处理,输出的数字为最小值,其中0在开头无效。

例:

输入 026148

输出 102468

这是一开始想到的方法,最初的版本没有考虑到数字不限长度的问题,这里就不附上了。

主要思想就是字符串转换成数字,排序,再把数字转换成字符串输出(如果以数字形式输出,就不满足限长度的要求)

#include<iostream>
#include<string>
#include<sstream>
using namespace std;

int main()
{
cout << "please input the number:" << endl;
string str;
cin >> str;
int str_length = str.length();
int *a = new int[str_length];

for(int i=0; i < str_length; i++ )
{
a[i] = str[i] - '0';
}

int k = str_length;
//排序
for (int i = 0; i < k; i++)
{
for (int j = i; j < k; j++)
{
if (a[i] > a[j])
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}

//找出第一个非零的数
int nozero = -1;
for(int i = 0; i < k; i++)
{
if(a[i]!=0)
{
nozero = i;
break;
}
}
if(nozero!=-1)
{
int temp = a[0];
a[0] = a[nozero];
a[nozero]= temp;
}

ostringstream oss;
string c;
string d;
for(int i=0; i<k ; i++)
{
oss<<a[i];
c = oss.str();
d+=c;
}
cout << c;

delete []a;
getchar();
getchar();
}


最好最快的方法:

直接字符串的字符可以比较大小,不必转换成数字再比较大小

#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
cin >> a;
int k = a.length();
//排序
for (int i = 0; i < k; i++)
{
for (int j = i; j < k; j++)
{
if (a[i] > a[j])
{
swap(a[i],a[j]);
}
}
}

//找出第一个非零的数
int nozero = -1;
for(int i = 0; i < k; i++)
{
if(a[i]!='0')
{
nozero = i;
break;
}
}
if(nozero!=-1)
{
swap(a[0],a[nozero]);
}

a290
cout << a;

getchar();
getchar();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐