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

Đếm các phép quay chia hết cho 8 trong C ++

Chúng tôi được cung cấp một số lượng lớn. Mục đích là để đếm các vòng quay của num chia hết cho 8.

Vì các phép quay không thể thực hiện lại nhiều lần. Chúng tôi sẽ sử dụng tài sản chia hết cho 8. Nếu ba chữ số cuối cùng chia hết cho 8 thì số đó chia hết cho 8. Nếu số đó là 1800 thì phép quay sẽ được 1800, 0180, 0018, 8001 trong tổng số 1800 chia hết cho 8.

Hãy cho chúng tôi hiểu với các ví dụ.

Đầu vào - num =15320

Đầu ra - Số phép quay chia hết cho 4 là:1

Giải thích - Xoay vòng là -

15320, 01532, 20153, 32015, 53201
Out of these, only 15320 is divisible by 8.

Đầu vào - num =848484

Đầu ra - Số phép quay chia hết cho 4 là:3

Giải thích - Xoay vòng là -

848484, 484848, 848484, 484848, 848484, 484848
Out of this all 484848’s are divisible by 8.

Cách tiếp cận được sử dụng trong chương trình dưới đây như sau

Chúng tôi sẽ chuyển đổi số thành một chuỗi và duyệt qua số đó bằng cách sử dụng vòng lặp for. Đối với mỗi cặp ba chữ số, hãy chuyển chúng thành một số nguyên và kiểm tra tính chia hết cho 8. Nếu chia hết thì tăng số lượng.

  • Lấy số dài bằng số dài.

  • Hàm Rotation_8 (số dài dài) lấy số num và trả về số lần quay của num chia hết cho 8.

  • Chuyển đổi num thành chuỗi str =to_string (num).

  • Số chữ số trong num sẽ là length =str.length ().

  • Lấy biến số tạm thời =0 để lưu trữ các giá trị nguyên có ba chữ số.

  • Lấy số lượng ban đầu là 0.

  • Nếu độ dài là 1 thì chỉ có một chữ số duy nhất. Chuyển nó thành số nguyên, chữ số =(str.at (0) - ’0’). Kiểm tra tính chất chia hết cho 8 và trả về kết quả là 1 hoặc 0.

  • Nếu độ dài là 2 thì chỉ có hai chữ số. Chuyển chúng thành số nguyên, part_1 =(str.at (0) - ’0’) và part_2 =(str [1] - '0') * 10 + (str [0] - '0'). Kiểm tra tính chất chia hết cho 8 và trả về kết quả là 1 hoặc 0.

  • Nếu không, đối với độ dài lớn hơn hoặc bằng ba chữ số, hãy duyệt chuỗi bằng cách sử dụng vòng lặp for từ i =0 đến i =length-1 và chuyển ba ký tự thành giá trị nguyên bằng chữ số =(str [i] - '0') * 100 + (str [i + 1] - '0') * 10 + (str [i + 2] - '0'); . Nếu giá trị của chữ số chia hết cho 8 thì số gia tăng.

  • Thực hiện quy trình tương tự như trên đối với cặp được tạo bởi chữ số cuối cùng và hai chữ số đầu tiên sử dụng chữ số =(str [length - 1] - '0') * 100 + (str [0] - '0') * 10 + (str [1 ] - '0');

  • Kiểm tra tính chất chia hết cho 8 và cập nhật số lượng.

  • Kết quả là cuối cùng trả về.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
int Rotation_8(long long num){
   string str = to_string(num);
   int length = str.length();
   int digit = 0, count = 0;
   if (length == 1){
      if(digit % 8 == 0){
         return 1;
      }
      else{
         return 0;
      }
   }
   else if(length == 2){
      int part_1 = (str[0] - '0') * 10 + (str[1] - '0');
      int part_2 = (str[1] - '0') * 10 + (str[0] - '0');
      if (part_1 % 8 == 0){
         count++;
      }
      if (part_2 % 8 == 0){
         count++;
      }
      return count;
   }
   else{
      for(int i = 0; i < (length - 2); i++){
         digit = (str[i] - '0') * 100 + (str[i + 1] - '0') * 10 + (str[i + 2] - '0');
         if (digit % 8 == 0){
            count++;
         }
      }
   }
   digit = (str[length - 1] - '0') * 100 + (str[0] - '0') * 10 + (str[1] - '0');
   if(digit % 8 == 0){
      count++;
   }
   digit = (str[length - 2] - '0') * 100 + (str[length - 1] - '0') * 10 + (str[0] - '0');
   if(digit%8 == 0){
      count++;
   }
   return count;
}
int main(){
   long long num = 24040;
   cout<<"Count of rotations divisible by 8 are: "<<Rotation_8(num);
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Count of rotations divisible by 8 are: 3