题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5676点击打开链接
ztr loves lucky numbers
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2050 Accepted Submission(s): 795
Problem Description
ztr loves lucky numbers. Everybody knows that positive integers are lucky if their decimal representation doesn't contain digits other than 4 and 7. For example, numbers 47, 744, 4 are lucky and 5, 17, 467 are not.
Lucky number is super lucky if it's decimal representation contains equal amount of digits 4 and 7. For example, numbers 47, 7744, 474477 are super lucky and 4, 744, 467 are not.
One day ztr came across a positive integer n. Help him to find the least super lucky number which is not less than n.
Lucky number is super lucky if it's decimal representation contains equal amount of digits 4 and 7. For example, numbers 47, 7744, 474477 are super lucky and 4, 744, 467 are not.
One day ztr came across a positive integer n. Help him to find the least super lucky number which is not less than n.
Input
There are T
(1≤n≤105)
cases
For each cases:
The only line contains a positive integer n(1≤n≤1018) . This number doesn't have leading zeroes.
For each cases:
The only line contains a positive integer n(1≤n≤1018) . This number doesn't have leading zeroes.
Output
For each cases
Output the answer
Output the answer
Sample Input
2 4500 47
Sample Output
4747 47
让你求大于所给数最小的由同样数量的4和7构成的数
用string构造数 然后用next_permutation函数进行全排列
注意10^18中会有数超longlong的 要特判。。
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<long long int > ans;
vector<long long int >::iterator it;
stringstream ss;
for(int i=1;i<=9;i++)
{
string s;
for(int j=0;j<i;j++)
s+='4';
for(int j=0;j<i;j++)
s+='7';
do
{
long long int mid;
ss << s;
ss >> mid;
ans.push_back(mid);
ss.clear();
}while(next_permutation(s.begin(),s.end()));
}
int t;
cin >> t;
while(t--)
{
long long int mid;
cin >> mid;
it=lower_bound(ans.begin(),ans.end(),mid);
if(mid>777777777444444444)
{
cout << "44444444447777777777" << endl;
}
else
cout << *it << endl;
}
}