我有一个练习,看起来是这样的:
问题陈述是简单而直接的。你将得到一个长度为N的非负整数P,你需要检查它是否可以被q整除?
整数P将在它的十进制表示中给出,其中P0为最左边的数字,P1为左侧的第二位数字!
其余的数字可以从公式中生成:
2 <= I <= N-1的Pi =( 4*Pi-1 + Pi-2 )模q
输入第一行包含一个整数T-表示测试用例的数量.
T行后面每一行包含四个整数P0、P1、Q和N!
如果相应的整数可被q整除,则每个testcase输出的输出是肯定的,否则不可以。
约束T <= 100000 0< P0,P1,Q< 10 0
4.
1 4 2 2
1 4 2 1
4 2 3 2
3 4 7 3
输出:是的,不是,是的,没有解释值P是14,1,42,345在各自的情况下!
这就是我想出来的
#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;
}
}
我所做的一切都很好,除了一件事,这个部分没有清除我的number变量。
number = "";
老实说,我不知道为什么,能不能有人纠正我的错误,解释我做错了什么。谢谢。
发布于 2021-11-17 15:42:12
你的问题是数字向量。
每一个循环--数字字符串--都会被数字向量重新填充,而这个数字向量永远不会被清除。
使用digits.clear()清空向量,如下所示:
#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;
}
}发布于 2021-11-17 15:34:56
要清除字符串,可以/应该将std::string::clear()用作:
number.clear();您的程序中可能还有其他逻辑错误,这可能是无法获得预期输出的原因。
此外,与其使用string number = "";创建/初始化字符串string number = "";,不如使用
string number;//no need to write = ""https://stackoverflow.com/questions/70007229
复制相似问题