fork download
  1. #include<iostream>
  2. #include<math.h>
  3.  
  4. using namespace std;
  5.  
  6. bool checkUseFour(int n, int m)
  7. {
  8. bool isOk = false;
  9. for (int i =1; i<=n;i*=10)
  10. {
  11. if ((n / i) % 10 == 4)
  12. {
  13. isOk = true;
  14. break;
  15. }
  16. }
  17. for (int i = 1; i <= m; i *= 10)
  18. {
  19. if ((m / i) % 10 == 4)
  20. {
  21. isOk = true;
  22. break;
  23. }
  24. }
  25.  
  26. return isOk;
  27. }
  28.  
  29. int main()
  30. {
  31. int testcase = 0;
  32. cin >> testcase;
  33.  
  34. if (testcase > 100 || testcase < 0)
  35. exit(-1);
  36.  
  37. for (int i = 1; i < testcase + 1; i++)
  38. {
  39. int n;
  40. cin >> n;
  41.  
  42. if(n<1 || n>=pow(10,100))
  43. exit(-1);
  44.  
  45. int left = 0, right = 0;
  46.  
  47. //if n == oddNumber , then left is even, right is even+1
  48. if (n % 2 == 1)
  49. {
  50. //if n == 3, 5, 7... then 1, 1+1 2, 2+1 ....
  51. int temp = n - 1;
  52. left = temp / 2, right = temp / 2 + 1;
  53. if (checkUseFour(left, right))
  54. {
  55. int offset= 0;
  56. for (int i = 1; offset*10+1 <= right; i *= 10)
  57. offset += i;
  58.  
  59. left += offset;
  60. right -= offset;
  61. }
  62. }
  63. //if n == evenNumber, then left and right equals to n/2
  64. else
  65. {
  66. int temp = n;
  67. left = temp / 2, right = temp / 2;
  68. if (checkUseFour(left, right))
  69. {
  70. int offset = 0;
  71. for (int i = 1; offset*10+1 <= right; i *= 10)
  72. offset += i;
  73.  
  74. left += offset;
  75. right -= offset;
  76. }
  77. }
  78.  
  79. cout << "Case #" << i << ": " << left << ' ' << right << endl;
  80. }
  81.  
  82. return 0;
  83. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
Standard output is empty