Dalam soalan ini, kita diberikan rentetan yang boleh ditafsirkan sebagai nombor. Sekarang kita perlu membahagikan rentetan ini kepada dua bahagian supaya bahagian pertama boleh dibahagikan dengan A dan bahagian kedua boleh dibahagikan dengan B (diberikan dua integer kita). Contohnya -
Input : str = "123", a = 12, b = 3 Output : YES 12 3 "12" is divisible by a and "3" is divisible by b. Input : str = "1200", a = 4, b = 3 Output : YES 12 00 Input : str = "125", a = 12, b = 3 Output : NO
Sekarang, dalam masalah ini, kami akan melakukan beberapa pra-pengiraan untuk menjadikan program kami lebih pantas dan kemudian ia akan dapat berfungsi di bawah kekangan yang lebih tinggi.
Dalam kaedah ini kita akan menjalankan dua gelung dalam rentetan, gelung pertama dari mula ke akhir dan gelung kedua dari hujung ke permulaan. Sekarang, pada setiap titik, kita mengambil modulo integer yang dibentuk oleh an dalam gelung pertama dan b dalam gelung kedua, dan kemudian kita boleh mencari jawapannya.
#include <bits/stdc++.h> using namespace std; void divisionOfString(string &str, int a, int b){ int n = str.length(); vector<int> mod_a(n+1, 0); // mod_a[0] = (str[0] - '0')%a; for (int i=1; i<n; i++) // front loop for calculating the mod of integer with a mod_a[i] = ((mod_a[i-1]*10)%a + (str[i]-'0'))%a; vector<int> mod_b(n+1, 0); mod_b[n-1] = (str[n-1] - '0')%b; int power10 = 10; // as we have assigned answer to last index for (int i= n-2; i>=0; i--){ // end loop for calculating the mod of integer with b mod_b[i] = (mod_b[i+1] + (str[i]-'0')*power10)%b; power10 = (power10 * 10) % b; } for (int i=0; i<n-1; i++){ // finding the division point if (mod_a[i] != 0) // we can skip through all the positions where mod_a is not zero continue; if (mod_b[i+1] == 0){ // now if the next index of mod_b is also zero so that is our division point cout << "YES\n"; /*******Printing the partitions formed**********/ for (int k=0; k<=i; k++) cout << str[k]; cout << " "; for (int k=i+1; k < n; k++) cout << str[k]; return; } } cout << "NO\n"; // else we print NO } // Driver code int main(){ string str = "123"; // given string int a = 12, b = 3; divisionOfString(str, a, b); return 0; }
YES 12 3
Dalam kaedah ini, kita kini mengira baki nombor yang dibentuk oleh setiap bahagian. Nombor pertama kita hendaklah boleh dibahagikan dengan a, jadi kita menjalankan gelung ke hadapan dan menyimpan mod nombor itu dengan a. Untuk b, kami menjalankan gelung ke belakang dan menyimpan mod sekarang kerana kami tahu bahawa jika mod an pada sebarang kedudukan adalah sifar, dan mod b pada indeks seterusnya adalah sifar, ini akan menjadi jawapan kami, jadi kami mencetaknya .
Dalam tutorial ini kami menyelesaikan masalah membahagikan nombor kepada dua bahagian yang boleh dibahagikan. Kami juga mempelajari program C++ untuk masalah ini dan kaedah lengkap (generik) untuk menyelesaikannya. Kita boleh menulis program yang sama dalam bahasa lain seperti C, java, python dan bahasa lain. Kami harap anda mendapati tutorial ini membantu.
Atas ialah kandungan terperinci Terjemah yang berikut ke dalam bahasa Cina: C++ Bahagikan nombor kepada dua bahagian yang boleh dibahagikan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!