Terjemah yang berikut ke dalam bahasa Cina: C++ Bahagikan nombor kepada dua bahagian yang boleh dibahagikan

PHPz
Lepaskan: 2023-08-30 17:33:03
ke hadapan
1094 orang telah melayarinya

将以下内容翻译为中文:C++ 将一个数分成两个可被整除的部分

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
Salin selepas log masuk

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.

Kaedah untuk mencari penyelesaian

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.

Contoh

#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] - &#39;0&#39;)%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]-&#39;0&#39;))%a;
    vector<int> mod_b(n+1, 0);
    mod_b[n-1] = (str[n-1] - &#39;0&#39;)%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]-&#39;0&#39;)*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;
}
Salin selepas log masuk

Output

YES
12 3
Salin selepas log masuk

Penjelasan kod di atas

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 .

Kesimpulan

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!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan