Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Write a C++ program that determines the largest number for which your computer c

ID: 664970 • Letter: W

Question

Write a C++ program that determines the largest number for which your computer can represent its factorial exactly using the longdouble type. A factorial is the product of all numbers from 1 to the given number. For example, 10 factorial (written 10!) is

1 X 2 X 3 X 4 X 5 X 6 X 7 X 8 X 9 X 10 = 3,628,800

As you can see, the factorial grows to be a large number very quickly. Your program should keep multiplying the prior factorial by the next integer, then substract 1 and check wheter the difference between the factorial and the factorial minus 1 is less than 1--an error tolerance. When the maximum precision of the type is reached, and least signficant digits of the product to be stored, then subtracting 1 should have no effect on the value. Because floating-point representations may not be exact, however, the expression

abs((number - 1) - number)

may not exactly equal 1. That's why you need to include a small error tolerance in the comparison.

Use functional decomposition to solve this problem. Code the program using good style and include helpful documenting comments. To keep the user informed of progress, you may wish to output all of the intermediate factorial values. The greatest number and its factorialshould be clearly labeled.

Explanation / Answer

I got the program but it is in C# please refer below. You will find many online tools to convert from C# to C++ so you can convert this program to C++

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BigMultiplier
{
    class Program
    {

        static void Main(string[] args)
        {
            int[] s1 = new int[1];
            int[] s2 = new int[1];

            s1[0]=1;
            Program p = new Program();

            int[] s3 = p.doit(s1, s2);
            Console.WriteLine("Enter the Number for Which Factorial to be Found (below 1000)");
            int limit = Convert.ToInt32(Console.ReadLine());


            for (int i = 1; i <= limit; i++)
            {
                s3 = p.return_array(i);
                s1 = p.doit(s1, s3);
            }
            int sum = 0;
            for (int j = s1.Length-1; j >=0; j--)
            {
                Console.Write(s1[j]);
                sum = sum + s1[j];
            }
            Console.Write("sum = "+sum);
            Console.WriteLine();
            Console.ReadLine();         
        }

        int[] return_array(int num)
        {
            int[] num_arr = new int[1]; ;

            if (num <= 9)
            {
                num_arr = new int[1];
                num_arr[0] = num;
            }
            else if (num <= 99)
            {
                num_arr = new int[2];
                num_arr[1] = num % 10;
                num = num / 10;
                num_arr[0] = num;
            }
            else if (num <= 999)
            {
                num_arr = new int[3];
                num_arr[2] = num % 10;
                num = num / 10;
                num_arr[1] = num % 10;
                num = num / 10;
                num_arr[0] = num % 10;
            }
            else if (num <= 9999)
            {
                num_arr = new int[4];
                num_arr[3] = num % 10;
                num = num / 10;
                num_arr[2] = num % 10;
                num = num / 10;
                num_arr[1] = num % 10;
                num = num / 10;
                num_arr[0] = num % 10;
            }
            else if (num <= 99999)
            {
                num_arr = new int[5];
                num_arr[4] = num % 10;
                num = num / 10;
                num_arr[3] = num % 10;
                num = num / 10;
                num_arr[2] = num % 10;
                num = num / 10;
                num_arr[1] = num % 10;
                num = num / 10;
                num_arr[0] = num % 10;
            }
            return num_arr;
        }


        int[] doit(int[] num1_int, int[] num2_int)
        {
//             String num1_string, num2_string;
//            Console.WriteLine("Enter the Number 1");
//            num1_string = Console.ReadLine();
//            Console.WriteLine("Enter the Number 2");
//            num2_string = Console.ReadLine();

//            int[] num1_int = new int[num1_string.Length];
//            int[] num2_int = new int[num2_string.Length];

//            for (int j = 0; j < num1_string.Length; j++)
//            {
//                num1_int[j] = num1_string[j]-48;
//                Console.Write(" " + num1_int[j]);
//            }

//            for(int j=0;j<num2_string.Length;j++)
//            {
//                num2_int[j] = num2_string[j]-48;
//                Console.Write(" " + num2_int[j]);
//            }

            int[,] num3_int = new int[num2_int.Length, (num1_int.Length + 1)];
            int i,k,temp=0;

            //Multiplication on Individual Digits Done and the Values are there in the Individual Cells of the Array
            for(i=0;i<num2_int.Length;i++)
            {
                for (k = 0; k < num1_int.Length; k++)
                {
                    int mul = (num1_int[k] * num2_int[i])+temp;
                    num3_int[i, k] = mul % 10;
                    temp = mul / 10;
                    if (k == (num1_int.Length - 1))
                    {
                        num3_int[i, k+1] = temp;
                    }
//                    Console.Write(" " + num3_int[i, k]);
                }
//                Console.Write(" " + num3_int[i, k]);
                    temp=0;
//                    Console.WriteLine();
            }

//            temp = 0;

//            Console.ReadLine();
            int[] result_int = new int[num1_int.Length + num2_int.Length];

//            int[,] num3_int = new int[num2_string.Length, (num1_string.Length + 1)];

            double result=0;

            for(i=0;i<num2_int.Length;i++)
                for (k = 0; k < (num1_int.Length + 1); k++)
                {
//                    Console.Write(" i = " + i + " k=" + k+"   ");
//                    Console.Write(num3_int[i, k]);
                    result=result+(num3_int[i,k]*Math.Pow(10,k)*Math.Pow(10,i));
//                    Console.WriteLine("   "+(num3_int[i,k]*Math.Pow(10,k)*Math.Pow(10,i)));
//                    Console.WriteLine("10^k " + Math.Pow(10,k));


                }

            int[,] num4_int= new int[num2_int.Length,num1_int.Length + num2_int.Length];
            for (i = 0; i < num2_int.Length; i++)
            {
                for (k = 0; k < (num1_int.Length + 1); k++)
                {
                    //for (int l = 0; l < 0; l++)
                    {
                        num4_int[i,k + i] = num3_int[i,k];
                    }
                }              
            }

            for (i = 0; i < num2_int.Length; i++)
            {
                for (k = 0; k < (num1_int.Length + num2_int.Length); k++)
                {
//                    Console.Write(" " + num4_int[i, k]);
                }
//                Console.WriteLine();
            }

            int[] re_int = new int[num1_int.Length + num2_int.Length];
            temp=0;
            for (i = 0; i < re_int.Length; i++)
            {
                re_int[i] = 0;
                for (k = 0; k < num2_int.Length; k++)
                {
                    re_int[i] = num4_int[k, i] + re_int[i];
                }
                int t = re_int[i] + temp;
                re_int[i]=t%10;
                temp=t/10;
                if(i==(re_int.Length-1))
                {
                    //Need to check
                }
            }

//            Console.WriteLine("Final Result - Reversed Order ");
//            for(i=0;i<re_int.Length;i++)
//               Console.Write(" "+re_int[i]);

             //           re_int[i+k]=;

//            Console.WriteLine("Final Result - Correct Order ");
//           for(i=re_int.Length-1;i>=0;i--)
//               Console.Write(" " + re_int[i]);

//            Console.WriteLine(result);
//            Console.ReadLine();
            return re_int;
        }
    }
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote