int64_t不包含13位整数

时间:2018-07-11 18:56:08

标签: c++ visual-studio c++11 visual-c++ c++14

我的程序可以使用最多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等方法在其他线程中使用建议。

2 个答案:

答案 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 longint64_t。它可以在Hackerrank上使用,因为它们是在64位长的Linux上编译的。