我的程序可以使用最多10位数字的数字,但是当我使用hackerrank编译器时,任何其他数字都会导致输出错误的数字。但是,当我使用Visual Studio时,它什么也不会输出,但我听到声音一直旋转得如此之快,直到关闭cmd窗口(也许是CPU)为止。
#include <bits/stdc++.h>
using namespace std;
int main()
{
// This program counts the "a" letters in a string (s) depending on how
// many iterations(numOfRepetitions) through the string
string s;
getline(cin, s);
int64_t numOfRepetitions;
cin >> numOfRepetitions;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
int64_t i=0;
int64_t countA=0; // Counting occurances of letter "a"
for (int64_t x=0; x<numOfRepetitions; x++)
{
if (s[i]=='a') countA++;
if (i==s.length()-1) i=-1;
i++;
}
cout << countA << endl;
}
// Input that works: s = 'a' numOfRepetitions=1000 Output:1000
// Input doesn't work: s = 'a' numOfRepetitions=1000000000000
// Output:1410065408 ( it should be: 1000000000000 )
注意:我尝试使用long long,int32_t,强制转换为double等方法在其他线程中使用建议。
答案 0 :(得分:0)
尝试此选项:
int main()
{
string s;
getline(cin, s);
int64_t numOfRepetitions = 0;
cin >> numOfRepetitions;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
int64_t countA = 0;
size_t i = 0;
for (; i < s.size(); ++i)
if (s.at(i) == 'a')
++countA;
if (i)
numOfRepetitions = (numOfRepetitions / i) * countA;
std::cout << numOfRepetitions << "\n";
std::cin.get();
return 0;
}
x
答案 1 :(得分:-2)
解决问题的方式要困难得多。您可以通过对整个字符串计数一次“ a”字符的数目以及剩下的任何乘积来获得答案。
在这些编程挑战中,蛮力解决方案很少是正确的解决方案。您的大规模循环将花费很长时间才能运行。
long repeatedString(string s, long n)
{
long full = n / s.size();
long rem = n % s.size();
long count = 0;
long rem_count = 0;
for (long i = 0; i < s.size(); ++i)
{
if (s[i] == 'a')
{
++count;
if (i < rem)
{
++rem_count;
}
}
}
return count * full + rem_count;
}
值得注意的是,long
不足以解决Visual Studio中的此问题,您需要更改为long long
或int64_t
。它可以在Hackerrank上使用,因为它们是在64位长的Linux上编译的。