Problem
Print the numbers without repeating digits in it and with in the range x to y.
ex. range 50 to 5000,
then it must print like 50,51,52,53,54,56,....57,......65,67,....76,77....109,120,123,124...4987.
Solution
/*
============================================================================
Author : James Chen
Email : a.james.chen@gmail.com
Description : Print the numbers without repeating digits
Created Data : 16-08-2013
Last Modified :
============================================================================
*/
#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
using namespace std;
void PrintNoDuplicateDigits(vector<int>& vec)
{
for(auto i: vec){
int digits[10] = {0};
bool print(true);
int num = abs(i);
while(num){
int residual = num % 10;
digits[residual] ++;
if(digits[residual] > 1){
print = false;
break;
}
num /= 10;
}
if(print) cout << setw(5) << " " << i;
}
}
void DoTest(vector<int> &vec)
{
cout << "The array is " << endl;
for(auto i: vec){
cout << setw(4) << i << " ";
}
cout << endl;
cout << "The output is " << endl;
PrintNoDuplicateDigits(vec);
cout << "\n------------------------" << endl;
}
int main(int argc, char* argv[])
{
int arr[] = {0, 1, 2, 3, 4, 11, 121, 100, 90, 89, 88};
vector<int> vec(arr, arr + sizeof(arr) / sizeof(int));
DoTest(vec);
int arr1[] = {98, 99, 100, 101, 102, 110, 111, 1000, 1001};
vector<int> vec1(arr1, arr1 + sizeof(arr1) / sizeof(int));
DoTest(vec1);
int arr2[] = {-98, -99, -100, -101, -102, -110, -111, -1000, -1001};
vector<int> vec2(arr2, arr2 + sizeof(arr2) / sizeof(int));
DoTest(vec2);
return 0;
}
Output
The array is
0 1 2 3 4 11 121 100 90 89 88
The output is
0 1 2 3 4 90 89
------------------------
The array is
98 99 100 101 102 110 111 1000 1001
The output is
98 102
------------------------
The array is
-98 -99 -100 -101 -102 -110 -111 -1000 -1001
The output is
-98 -102
------------------------
Press any key to continue . . ..
Pay attention to negative numbers