c++ - C++ 中的欧拉项目 8

标签 c++ algorithm

我正在尝试解决项目 euler 中的问题 8,但我得到的结果数字太大,我不知道为什么。

问题是“找出1000位数字中相邻的13位数字的乘积最大,这个乘积的值是多少?”

我的代码:

#include <iostream>
#include <string>

int main()
{
    std::string str = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450";

    long long a = 1;
    long long fin = 0;

    for (int c = 0; c < 988; c++)
    {
        for (int d = 0; d < 13; d++)
        {
            a = a * str.at(c + d);
        }

        if (a > fin)
        {
            fin = a;
            std::cout << fin << " at " << c << std::endl;
        }

        a = 1;
    }

    system("pause");
}

输出:

7948587103611909356 at 0
8818137127266647872 at 15
8977826317031653376 at 71
9191378290313403392 at 214
9205903071867879424 at 573
Press any key to continue...

最佳答案

问题是字符 '0''9' 与整数 09 不同;相反,'0' 的值为 48'1' 的值为 49,依此类推。 (这些是这些字符的 ASCII 值。)

因此,将数字字符转换为所需的数字——例如,提取例如3 来自 '3' - 您需要减去 '0'。换句话说,你需要改变这个:

            a = a * str.at(c + d);

为此:

            a = a * (str.at(c + d) - '0');

关于c++ - C++ 中的欧拉项目 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41318727/

相关文章:

c++ - 使用列表的此 C++ 代码出现段错误的原因是什么?

c++ - 如何使移动检测到的手和指尖像鼠标一样与 Qt GUI 交互?

java - 插入二叉搜索树的运行时间是 n^2?

java - 将递归方法转化为公式

python - 在 map 上划分长度为 1 的部分

python - 如何在C++中创建一个可迭代的类?

c++ - 可能影响功能所用时间的事情

C 试图修复无限循环

c++ - 异步分布式文件传输

c++ - PendSV/SVC 异常是否立即引发?