Софтуерно Инженерство
Loading...
venimir avatar venimir 0 Точки

Проблем с BigInteger

Здравейте колеги

казвам се Венимир Петков и се уча онлайн от клиповете започнах със C# и съм стигнал до цикли вдъхновен от новите знания седнах и написах програма за намиране числата на Фибоначи например въвеждате 5-то число и до принтира първите 5 числа и т.н. 

 

Проблема обаче е че UINT след 46 число ми дава Overflow затова му сложих Catch като временно решение на проблема сега обаче искам да добавя BigInteger, но не ми позполява да приложа оператора + към BigInteger. Може ли да ми помогнете като ми кажете как да го направя. Благодаря предварително.

Code

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace FibboNumbers

{

    class FibboNumbers

    {

        static void Main(string[] args)

        {

            Console.WriteLine("Imput a number from 1 to 46:");

            uint FibboCountLenght = uint.Parse(Console.ReadLine());

            if (FibboCountLenght < 0)

            {

                Console.WriteLine("Imput a positive number");

            }

            uint FirstNum = 0;

            uint SecondNum = 1;

            uint result;

            byte counter = 1;

            Console.WriteLine("Fibonacci Numbers are :");

 

            while (FibboCountLenght > 0)

            {

                checked

                {

                    try

                    {

                        result = FirstNum + SecondNum;

                        Console.WriteLine("{0} number is = {1}",counter++, result);

                        FirstNum = SecondNum;

                        SecondNum = result;

                    }

                    catch(OverflowException)

                    {

                        Console.WriteLine("overflow you can imput a number max 46");

                        break;

                    }

                }

                FibboCountLenght--;

            }

        }

    }

}

Тагове:
Ivakis avatar Ivakis 98 Точки

Здравей, ако толкова държиш на BI ето така се действа - 

  1. Add a reference to the System.Numerics assembly to your project.

    a. In Solution Explorer, right-click the project node and click Add Reference.

    b. In the Add Reference dialog box, select the .NET tab.

    c. Select System.Numerics, and then click OK.

  2. Add a using directive importing the System.Numerics namespace:

    using System.Numerics;
  3. Use the BigInteger structure:

    var i = new BigInteger(934157136952);
0
venimir avatar venimir 0 Точки

Добре това го има и в интернет въпроса е как да го inject във кода така че result да не се препълва и програмата да може да пресмята повече от 46 числа

0
ppbaev avatar ppbaev 156 Точки

Правиш стъпки 1 и 2 от горния пост, след това на 6-те места, където имаш uint ги сменяш с BigInteger и това е, кода си работи. Ако си сложил BigInteger преди да си добавил референцията към System.Numerics, може да си натиснал ctrl + . и visual studio да ти е направило празен клас BigInteger, който няма как да работи с оператора +. Истинкият BigInteger в C# си работи с всички оператори както всеки други числови тип.

0
28/04/2017 09:22:04
Ivakis avatar Ivakis 98 Точки

Аз мислех, че се подразбира, ако ще ползваш BigInteger, да не слагаш uint. Все едно да искаш стринг, ама да пишеш чар, нали.. Успех

1
venimir avatar venimir 0 Точки

Стана Благодаря .

0