Home > other >  Why my empty string assignment doesn't clear my string
Why my empty string assignment doesn't clear my string

Time:11-18

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 !

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.

CodePudding user response:

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;
    }

}

CodePudding user response:

To clear a string you can/should use std::string::clear() as:

number.clear();

There may be other logical errors in your program which may be the reason for not getting the output you expect.

Also instead of creating/initializing the string number using string number = "";, you should use

string number;//no need to write = ""
  •  Tags:  
  • c
  • Related