Advertisement
JavaFan

Calculate n! [1 , 100]

Jan 2nd, 2014
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.22 KB | None | 0 0
  1.  
  2. //Write a program to calculate n! for each n in the range[1..100]. Hint: Implement first a method
  3. //that multiplies a number represented as array of digits by given integer number.
  4.  
  5. namespace Methods10
  6. {
  7. using System;
  8. using System.Text;
  9. using System.Numerics;
  10.  
  11. class FactorielMethod
  12. {
  13. public static int[] NumberMultiplyer(int[] arr, int digit)
  14. {
  15. int len = arr.Length;
  16. int[] tempArr = new int[len];
  17. int[] tempArr2 = new int[len];
  18.  
  19. // Console.WriteLine("resultArr " + string.Join("", arr));
  20.  
  21. for (int i = 0; i < arr.Length - 1; i++) // {0, 2, 1} 0 2 1
  22. {
  23.  
  24. if (arr[i] != 0)
  25. {
  26.  
  27. for (int k = 0; k < len; k++)
  28. {
  29. tempArr[k] = 0;
  30. }
  31.  
  32. int current = digit * arr[i];
  33.  
  34. for (int j = i; j < i + 3 ; j++)
  35. {
  36. tempArr[j] = current % 10;
  37. current = current / 10;
  38. }
  39. tempArr2 = addArraysOfDigits(tempArr, tempArr2);
  40. }
  41. }
  42.  
  43. return tempArr2;
  44. }
  45.  
  46. static int [] addArraysOfDigits(int[] arr1, int[] arr2)
  47. {
  48. int maxLen = arr1.Length > arr2.Length ? arr1.Length : arr2.Length;
  49.  
  50. int[] tempArr = new int[maxLen + 1];
  51. int[] sum = new int[maxLen + 1];
  52.  
  53. if (arr1.Length > arr2.Length)
  54. {
  55. for (int i = 0; i < maxLen; i++)
  56. {
  57. if (i < arr2.Length)
  58. {
  59. tempArr[i] = arr2[i];
  60. }
  61. else
  62. {
  63. tempArr[i] = 0;
  64. }
  65. }
  66.  
  67. for (int i = 0; i < sum.Length; i++)
  68. {
  69. if (i < arr1.Length)
  70. {
  71. sum[i] = (arr1[i] + tempArr[i]) % 10;
  72. }
  73. if (i > 0 && arr1[i - 1] + tempArr[i - 1] >= 10)
  74. {
  75. sum[i] += 1;
  76. }
  77. }
  78. }
  79. else
  80. {
  81. for (int i = 0; i < maxLen; i++)
  82. {
  83. if (i < arr1.Length)
  84. {
  85. tempArr[i] = arr1[i];
  86. }
  87. else
  88. {
  89. tempArr[i] = 0;
  90. }
  91. }
  92.  
  93. for (int i = 0; i < sum.Length; i++)
  94. {
  95. if (i < arr2.Length)
  96. {
  97. sum[i] = (arr2[i] + tempArr[i]) % 10;
  98. }
  99. if (i > 0 && arr2[i - 1] + tempArr[i - 1] >= 10)
  100. {
  101. sum[i] += 1;
  102. }
  103. }
  104. }
  105.  
  106. return sum;
  107. }
  108.  
  109. public static void Main()
  110. {
  111. while (true)
  112. {
  113.  
  114. Console.Write("Insert value[0, 100] : ");
  115. int n = int.Parse(Console.ReadLine());
  116.  
  117. int[] answer = new int[n * n + 1]; // +1 for n = 0
  118. answer[0] = 1;
  119.  
  120. for (int i = 2; i <= n; i++) // 0 and 1 ! are 1
  121. {
  122. answer = NumberMultiplyer(answer, i);
  123. }
  124.  
  125. string final = "";
  126. for (int i = 0; i < answer.Length; i++)
  127. {
  128. final = answer[i] + final;
  129. }
  130.  
  131. BigInteger finalResult = BigInteger.Parse(final);
  132.  
  133. Console.WriteLine("My result: \t" + finalResult);
  134.  
  135.  
  136. // check
  137.  
  138. BigInteger factoriel = 1;
  139.  
  140. int m = 1;
  141.  
  142. while (m <= n)
  143. {
  144. factoriel = factoriel * m;
  145. m++;
  146. }
  147.  
  148. Console.WriteLine("{0}! = \t\t{1}", n, factoriel);
  149. }
  150. }
  151. }
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement