stoi
这里我们来了解一个函数 \(stoi\)
作用是将 \(n\) 进制的字符串转化为十进制,使用时包含头文件 \(string\)
定义如下:
int stoi( const std::string& str, std::size_t* pos = nullptr, int base = 10 );
参数:
\(str\) - 待转换的字符
\(pos\) - 其取值可以是一个空字符,在这种情况下,pos未被使用;另外如果pos不是空指针,函数将pos的值设置为str中数字后面的第一个字符的位置。
\(base\) - 字符中数字的进制,默认为10进制,如果base取值为0,则进制由字符串中的格式决定。
返回值:
如果转换成功的话,\(stoi\) 函数将会把转换后的得到数字以 \(int\) 类型返回。
如果字符串中没有数字的话,将会抛出"invalid_argument"的异常;
如果字符串中的数字转换后超过int的范围,将会抛出"out_of_range"的异常;
因此使用 \(stoi\) 函数的时候最好加入异常处理。
题目
给定一个整数 \(n\),你可以将其中的数字以任意顺序重新排列,组成新的数字(也可以不重排,保留原数字)。
请问能否组合出 \(30\) 的倍数,如果可以,则输出满足条件的最大值,否则输出 \(-1\)。
例如,对于 \(210\),你可以通过重排得到 \(201,210,012,021,102,120\),其中 \(120,210\) 都是 \(30\) 的倍数,由于要找最大的,所以答案是 \(210\)。
输入格式
一个整数 \(n\)。
输出格式
输出能够通过重排得到的最大符合条件的数。
如果不存在,则输出 \(-1\)。
数据范围
\(1 \le n \le 10^9\)
输入样例:
201
输出样例:
210
Code
//末位必须为0,没有0直接break
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin >> s;
sort(s.begin(),s.end(),greater<>());//模拟字符串的重排
if(stoi(s) % 30 == 0)cout << s << endl;//使用函数
else cout << -1 << endl;
return 0;
}
标签:数字,210,int,题解,30,pos,stoi,3721
From: https://www.cnblogs.com/BadBadBad/p/18003425/AcWing-3721