Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Why my empty string assignment doesn't clear my string

I have an exercise which looks like that:

Problem statement is simple and straight forward . You will be given a non-negative integer P of length N and you need to check whether
it’s divisible by Q ?

Integer P will be given in its decimal representation with P0 as leftmost digit and P1 as second digit from left !

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Rest of the digit can be generated from the formula :

Pi = ( 4*Pi-1 + Pi-2 ) modulo Q for 2 <= i <= N-1

Input
The first line contains one integer T – denoting the number of test cases.

T lines follow each containing four integers P0 , P1 , Q and N !

Output
For each testcase output YES if the corresponding integer is divisible by Q and NO otherwise.

Constraints
T <= 100000
0 < P0 , P1 , Q < 10
0 < N <= 1018
Example
Input:

4

1 4 2 2

1 4 2 1

4 2 3 2

3 4 7 3

Output:
YES
NO
YES
NO
Explanation
Value of P is 14, 1, 42, 345 in respective cases !

and that’s what I came up with

    #include <iostream>
    #include <vector>
    #include <string>
    
    using namespace std;

    int main()
    {
        int t, q, n, p_0, p_1, p_temp, p;
        vector<int> digits;
        vector<string> answers;
        string number = "";
    
        cin >> t;
    
        for (int i = 0; i < t; i++)
        {
            cin >> p_0 >> p_1 >> q >> n;
            if (n == 1)
            {
                digits.push_back(p_0);
            }
            else
            {
                digits.push_back(p_0);
                digits.push_back(p_1);
                for (int i = 2; i <= (n - 1); i++)
                {
                    p_temp = (4 * digits[i - 1] + digits[i - 2]) % q;
                    digits.push_back(p_temp);
                }
            }
            for (int i = 0; i < digits.size(); i++)
            {
                number += to_string(digits[i]);
            }
            p = stoi(number);
            cout << number << endl;
            if (p % q == 0)
            {
                answers.push_back("YES");
            }
            else
            {
                answers.push_back("NO");
            }
            number = "";
        }
        for (int i = 0; i < answers.size(); i++)
        {
            cout << answers[i] << endl;
        }
    
    }

Everything I have done works fine, except for one thing, this part does not clear my number variable

    number = "";

And honestly I don’t know why, could someone correct my mistakes and explain me what did I do wrong. Thanks.

>Solution :

Your problem is with the digits vector.

Each loop the number string just gets repopulated with the digits vector which is never cleared.

Use digits.clear() to empty the vector like so:

#include <iostream>
#include <vector>
#include <string>

using namespace std;



int main()
{
    int t, q, n, p_0, p_1, p_temp, p;
    vector<int> digits;
    vector<string> answers;
    string number = "";

    cin >> t;

    for (int i = 0; i < t; i++)
    {
        cin >> p_0 >> p_1 >> q >> n;

        

        if (n == 1)
        {
            digits.push_back(p_0);
        }
        else
        {
            digits.push_back(p_0);
            digits.push_back(p_1);
            for (int i = 2; i <= (n - 1); i++)
            {
                p_temp = (4 * digits[i - 1] + digits[i - 2]) % q;
                digits.push_back(p_temp);
            }
        }

        for (int i = 0; i < digits.size(); i++)
        {
            number += to_string(digits[i]);
        }

        p = stoi(number);
        cout << number << endl;

        if (p % q == 0)
        {
            answers.push_back("YES");
        }
        else
        {
            answers.push_back("NO");
        }

        digits.clear();
        number = "";
    }

    for (int i = 0; i < answers.size(); i++)
    {
        cout << answers[i] << endl;
    }

}
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading