Advertisement
Guest User

Untitled

a guest
May 6th, 2015
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.79 KB | None | 0 0
  1. /*
  2. * File: main.cpp
  3. * Author: Yue
  4. *
  5. * Created on March 22, 2015, 5:00 AM
  6. *
  7. * By visual inspection:
  8. 4 x 1738 = 6952
  9. 4 x 1963 = 7852
  10. 12 x 483 = 5796
  11. 18 x 297 = 5346
  12. 21 x 474 = 9954 x
  13. 27 x 198 = 5346 x
  14. 28 x 157 = 4396
  15. 39 x 186 = 7254
  16. 42 x 138 = 5796 x
  17. 48 x 159 = 7632
  18. */
  19.  
  20. #include <cstdlib>
  21. #include <stdio.h>
  22. #include <math.h>
  23.  
  24. using namespace std;
  25.  
  26. // Need to write global array, because pow function is for floats and causes
  27. // errors when converting to int
  28. int power[7] = {1, 10, 100, 1000, 10000, 100000, 1000000};
  29.  
  30. bool ternaryGood( int multiplicand, int multiplier, int product ) {
  31. int length[3];
  32. if( multiplier > 9 ) length[0]=2;
  33. else length[0]=1;
  34. for( int i=1;i<5;i++ ) {
  35. if( multiplicand<pow(10,i) ) {
  36. length[1]=i;
  37. break;
  38. }
  39. }
  40. for( int i=4;i<8;i++ ) {
  41. if( product<pow(10,i) ) {
  42. length[2]=i;
  43. break;
  44. }
  45. }
  46. if( length[0]+length[1]+length[2]!=9 )
  47. return false;
  48.  
  49. int digit[9];
  50. //printf("%d * %d = %d\n", multiplier, multiplicand, product);
  51. //printf("%d . %d . %d\n", length[0], length[1], length[2]);
  52.  
  53. for( int i=0;i<length[1]-1; i++ ) {
  54. digit[i] = multiplier/10;
  55. multiplier -= digit[i]*10;
  56. }
  57. digit[length[0]-1] = multiplier;
  58.  
  59. for( int i=0;i<length[1]-1; i++ ) {
  60. int paw = power[length[1]-i-1];
  61. digit[length[0]+i] = multiplicand/paw;
  62. multiplicand -= digit[length[0]+i]*paw;
  63. //printf("Multiplicand: %d + %d * %d\n", multiplicand, digit[length[0]+i], paw);
  64. }
  65. digit[length[0]+length[1]-1] = multiplicand;
  66.  
  67. for( int i=0;i<length[2]-1; i++ ) {
  68. int paw = power[length[2]-i-1];
  69. digit[length[0]+length[1]+i] = product/paw;
  70. product -= digit[length[0]+length[1]+i]*paw;
  71. }
  72. digit[length[0]+length[1]+length[2]-1] = product;
  73.  
  74. int sum = 0;
  75. int prod = 1;
  76. if( sum!=45 || prod!=362880 )
  77. return false;
  78. return true;
  79. }
  80.  
  81. int main(int argc, char** argv) {
  82.  
  83. // Multiplicand WLOG can be assumed bigger than multiplier
  84. // Product is at least 1234, at most 7 digits (i.e. 9876543)
  85. // Multiplier is between 1 and 98
  86. // Multiplicand is between 1 and 9876
  87.  
  88. int multiplicand;
  89. int multiplier;
  90. int product;
  91. int sum = 0;
  92. int count = 0;
  93.  
  94. for( multiplier=1; multiplier<98; multiplier++ ) {
  95. for( multiplicand=1234/multiplier; multiplicand<9876; multiplicand++ ) {
  96. product = multiplicand * multiplier;
  97. count++;
  98. if( product > 9876543 )
  99. break;
  100. else if( ternaryGood(multiplicand, multiplier, product) ) {
  101. sum += product;
  102. printf( "%d x %d = %d, %d\n", multiplier, multiplicand, product, sum );
  103. }
  104. }
  105. }
  106.  
  107. return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement