سورس کد سی شارپ عمل ضرب بر روی اعدادصحیح بزرگ


دات وایت | DotWhite.ir
سورس کد  سی شارپ عمل ضرب بر روی اعدادصحیح بزرگ

در این پست از دات وایت سورس کد عمل ضرب روی اعداد صحیح بزرگ برای سی شارپ را قرار داده ایم. از آنجایی که در سی شارپ ضرب اعداد بصورت معمولی با طول بیشتر از 10 رقمی یا شایدم کمتر غیر قابل انجام است از این رو باید الگوریتمی نوشته شود تا این عمل را در چندین مرحله انجام دهد.


مثال : 

Input : num1 = 4154  
        num2 = 51454
Output : 213739916 
Input :  num1 = 654154154151454545415415454  
         num2 = 63516561563156316545145146514654 
Output : 41549622603955309777243716069997997007620439937711509062916


سورس کدی که در این پست قرار داده ایم یک سورس کامل و سریع در این ضمینه می باشد که در ادامه مطلب می توانید مشاهده کنید.

سورس کد سی شارپ ضرب اعداد بزرگ : 

// C# program to multiply two numbers 

// represented as Strings. 

using System;


class GFG

{

// Multiplies str1 and str2, and prints result. 

static String multiply(String num1, String num2)

{

    int len1 = num1.Length;

    int len2 = num2.Length;

    if (len1 == 0 || len2 ==0)

        return "0";


    // will keep theresult number in vector 

    // in reverseorder 

   int[] result = new int[len1 + len2];


    // Below two indexesare used to 

    // find positions inresult. 

    int i_n1 = 0;

    int i_n2 = 0;

    int i;

    // Go from right toleft in num1 

    for (i = len1 - 1; i>= 0; i--)

    {

        int carry = 0;

        int n1 = num1[i] - '0';


        // To shift positionto left after every 

        // multipliccharAtionof a digit in num2 

        i_n2 = 0;

        // Go from right toleft in num2             

        for (int j = len2 - 1; j >=0; j--)

        {

            // Take current digit ofsecond number 

            int n2 = num2[j] - '0';


            // Multiply withcurrent digit of first number 

            // and add result topreviously stored result 

            // charAt currentposition. 

            int sum = n1 * n2 +result[i_n1 + i_n2] + carry;


            // Carry for next itercharAtion 

            carry =sum / 10;

            // Store result 

result[i_n1 + i_n2] = sum % 10;

            i_n2++;

        }

        // store carry in nextcell 

        if (carry > 0)

result[i_n1 + i_n2] += carry;

        // To shift positionto left after every 

        // multipliccharAtionof a digit in num1. 

        i_n1++;

    }

    // ignore '0's fromthe right 

    i =result.Length - 1;

    while (i >= 0 &&result[i] == 0)

        i--;

    // If all were '0's -means either both 

    // or one of num1 ornum2 were '0' 

    if (i == -1)

        return "0";

    // genercharAte theresult String 

    String s = "";

    while (i >= 0)

        s += (result[i--]);

    return s;

}

// Driver code 

public static void Main(String[] args)

{

    String str1 = "1235421415454545454545454544";

    String str2 = "1714546546546545454544548544544545";

    if ((str1[0] == '-' || str2[0] == '-') && (str1[0] !='-' || str2[0] != '-'))

        Console.Write("-");

    if (str1[0] == '-' && str2[0] !='-')

    {

        str1 = str1.Substring(1);

    }

    else if (str1[0] != '-' && str2[0] =='-')

    {

        str2 = str2.Substring(1);

    }

    else if (str1[0] == '-' && str2[0] =='-')

    {

        str1 = str1.Substring(1);

        str2 = str2.Substring(1);

    }

    Console.WriteLine(multiply(str1,str2));

}

}

// This code is contributed by Rajput-Ji

خروجی کد بالا : 

2118187521397235888154583183918321221520083884298838480662480
منبع : دات وایت | DotWhite.IR


تاریخ انتشار : چهارشنبه 13 فروردين 1399 ساعت: 16:35 | نظرات()
برچسب ها : , , , , , , , , , , , , , , , , , , , ,

نویسنده :

بازديد : 191

موضوع: سی شارپ , کد های مفید ,

بخش نظرات این مطلب
نام
ایمیل (منتشر نمی‌شود) (لازم)
وبسایت
:) :( ;) :D ;)) :X :? :P :* =(( :O @};- :B /:) :S
نظر خصوصی
مشخصات شما ذخیره شود ؟ [حذف مشخصات] [شکلک ها]
کد امنیتیرفرش کد امنیتی