中兴笔试题

来源:互联网 发布:用电脑接接网络监控 编辑:程序博客网 时间:2024/05/24 06:20

输入一个整数(正负都可能) 返回一个最小整数 706 返回607

 

#include<iostream>

#include<vector>

#include<algorithm>

#include<cmath>

using namespace std;

 

bool comp(int a,int b)

{

return a>b;

}

 

 

int main()

{

long num;

cin>>num;

//存到vector里面

vector<int> v1;

if(num>0)

{

while(num>0)

{

v1.push_back(num%10);

num=num/10;

}

sort(v1.begin(),v1.end());

int cnt=0;

    for(int i=0;i<v1.size();i++)

{

if(v1[i]==0)

{

cnt++;

}

}

if(cnt>0)

{

v1.erase(v1.begin(),v1.begin()+cnt); //?看下erase 

//c.erase(beg,end) 删除[beg,end)区间的数据

}

//0插入到最小位的后面

v1.insert(v1.begin()+1,cnt,0);//看下insert   在指定位置loc前插入num个值为val的元素

 

//vector中的数组合起

for (int i = 0; i < v1.size() - 1; i++)

{

int j = v1.size() - 1 - i;

while (j > 0)

{

v1[i] *= 10;//恢复数字本来的大小,如706中的7变成700

j--;

}

}

 

int res = 0;

for (int i = 0; i < v1.size(); i++)

{

res += v1[i];

}

cout << res;

 

}//num>0;

 

else//num<0  输入的是负数

{

num=num*(-1);

while(num>0)

{

v1.push_back(num%10);

num=num/10;

}

sort(v1.begin(),v1.end(),comp);//从大到小排列

//容器中的数弹出来后,再加个负号就是最小数

//将容器vector里面的数字读出来组合成数字

for (int i = 0; i < v1.size() - 1; i++)

{

int j = v1.size() - 1 - i;

while (j > 0)

{

v1[i] *= 10;

j--;

}

}

int res = 0;

for (int i = 0; i < v1.size(); i++)

{

res += v1[i];

}

cout << res*(-1);

}

return 0;

}

 

原创粉丝点击