Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm chữ số cuối cùng của a ^ b cho Số lớn trong C ++

Trong bài toán này, chúng ta được cho hai số a và b. Nhiệm vụ của chúng ta là tìm Chữ số cuối cùng của a ^ b cho Số lớn.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào: a =4 b =124

Đầu ra: 6

Giải thích:

Giá trị của a ^ b là 4,523128486 * 10 74

Phương pháp tiếp cận giải pháp

Giải pháp cho vấn đề dựa trên thực tế là tất cả các số mũ của một số sẽ được lặp lại sau 4 giá trị số mũ.

Vì vậy, chúng ta sẽ tìm giá trị của b% 4. Ngoài ra, đối với bất kỳ giá trị cơ bản nào, chữ số cuối cùng của lũy thừa được quyết định bởi chữ số cuối cùng của giá trị cơ bản.

Vì vậy, giá trị kết quả sẽ được tính là

Giá trị cuối cùng của a ^ (b% 4)

Chương trình minh họa hoạt động của giải pháp của chúng tôi,

Ví dụ

#include <bits/stdc++.h>
using namespace std;

int calcModulus(char b[], int a)
{
   int mod = 0;

   for (int i = 0; i < strlen(b); i++)
      mod = (mod * 10 + b[i] - '0') % a;

   return mod;
}

int calcLastDigitInExpo(char a[], char b[]) {

   int len_a = strlen(a), len_b = strlen(b);

   if (len_a == 1 && len_b == 1 && b[0] == '0' && a[0] == '0')
      return 1;
   if (len_b == 1 && b[0] == '0')
      return 1;
   if (len_a == 1 && a[0] == '0')
      return 0;

   int exponent = (calcModulus(b, 4) == 0) ? 4 : calcModulus(b, 4);
   int base = a[len_a - 1] - '0';
   int result = pow(base, exponent);
   return result % 10;
}

int main()
{
   char a[] = "559", b[] = "4532";
   cout<<"The last digit in of the value is "<<calcLastDigitInExpo(a, b);
   return 0;
}

Đầu ra

The last digit in of the value is 1