fork(2) download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int findNumbers(int number, int power);
  5. int findPow(int base, int power);
  6. int fact(int n);
  7.  
  8. int main() {
  9. int n;
  10. cin >> n;
  11. cout << findNumbers(n, 1);
  12. }
  13.  
  14. int findNumbers(int number, int power) {
  15. int powerOf10 = findPow(10, power);
  16. int numberTemp = number / (powerOf10/10);
  17. cerr << powerOf10 << "\n";
  18. int currentDigit = numberTemp % powerOf10; //errorLine
  19.  
  20. if (number/(powerOf10/10) == 0)
  21. return 0;
  22.  
  23. int ans = findNumbers(number, power + 1);
  24. int *digits = new int[10]();
  25. for(int i = 0; i < 10; i++)
  26. digits[i] = 0;
  27. for(int i = power - 1; i > 0; i--) {
  28. int power10temp = findPow(10, i);
  29. int digitTemp = number % power10temp;
  30. digits[digitTemp]++;
  31. }
  32. digits[currentDigit]++;
  33. int numerator = fact(power - 1);
  34. for(int i = currentDigit + 1; i < 10; i++) {
  35. int denominator = 1;
  36. if(digits[i] != 0) {
  37. digits[i]--;
  38. for(int j = 0; j < 10; j++) {
  39. denominator = denominator * fact(digits[i]);
  40. }
  41. ans = ans + (numerator/denominator);
  42. digits[i]++;
  43. }
  44. }
  45. delete[] digits;
  46. cout << ans << endl;
  47. return ans;
  48. }
  49.  
  50. int fact(int n) {
  51. if (n <= 1)
  52. return 1;
  53. return n*fact(n-1);
  54. }
  55.  
  56. int findPow(int base, int power) {
  57. int ans = 1;
  58. for(int i = 0; i < power; i++) {
  59. ans = ans * base;
  60. }
  61. return ans;
  62. }
Runtime error #stdin #stdout #stderr 0s 3140KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
10
100
1000
10000
100000
1000000
10000000
100000000
1000000000
1410065408
1215752192
-727379968
1316134912
276447232
-1530494976
1874919424
1569325056
-1486618624
-1981284352
1661992960
-559939584
-1304428544
-159383552
-1593835520
1241513984
-469762048
-402653184
268435456
-1610612736
1073741824
-2147483648