Broken Calculator Question

Hey, I am not able to understand how to approach the question in terms of storing the number calculated. One way to solve this would be to use strings and arrays to store each digit but how to implement that caz we need to store the final answer also? Please help to solve this.

Factorial of 100 has 158 digits. It is not possible to store these many digits even if we use long long int.
hence normal factorial function did not work

Following is a simple solution where we use an array to store individual digits of the result. The idea is to use basic mathematics for multiplication.

The following is a detailed algorithm for finding factorial.

factorial(n)

  1. Create an array ‘res[]’ of MAX size where MAX is number of maximum digits in output.
  2. Initialize value stored in ‘res[]’ as 1 and initialize ‘res_size’ (size of ‘res[]’) as 1.
  3. Do following for all numbers from x = 2 to n.
    ……a) Multiply x with res[] and update res[] and res_size to store the multiplication result.

How to multiply a number ‘x’ with the number stored in res[]?
The idea is to use simple school mathematics. We one by one multiply x with every digit of res[]. The important point to note here is digits are multiplied from rightmost digit to leftmost digit. If we store digits in same order in res[], then it becomes difficult to update res[] without extra space. That is why res[] is maintained in reverse way, i.e., digits from right to left are stored.

multiply(res[], x)

  1. Initialize carry as 0.
  2. Do following for i = 0 to res_size – 1
    ….a) Find value of res[i] * x + carry. Let this value be prod.
    ….b) Update res[i] by storing last digit of prod in it.
    ….c) Update carry by storing remaining digits in carry.
  3. Put all digits of carry in res[] and increase res_size by number of digits in carry.
    tell me now in which part you have doubt.
    try to understand this then after that i will share the code:
    Happy Learning!!

Hey, I have coded this :- https://ide.codingblocks.com/s/411871, and I am not able to find the error in the code. Please tell where it is wrong and how to correct it.

Hey @Sakshi2004

        while(j < a_size){
           int x= (a[j]*i + carry); //save in x
           carry = x/10;//updated this
           a[j]=x%10;//added this
           j++;
        }

Hey, I have updated the changes described by you and it is not giving correct answer. Please tell the error :- https://ide.codingblocks.com/s/412434

      int x = (a[j]*i + carry);//removed %10