c++ - 卡在项目 euler 的问题 8 上,得到错误的答案,但代码似乎正确
问题描述
#include <bits/stdc++.h>
using namespace std ;
typedef long long LL ;
int main(){
int arr[1000] = {0} ;
int k = 0 ;
string s ;
for (int i=0 ; i<20 ; i++){
cin >> s ;
for (int j=0 ; j<50 ; j++){
arr[k] = (int)(s[j]-'0') ;
k++ ;
}
}
long long int product = 1 , maxi = 0 ;
for (int i=0 ; i+12 < 1000 ; i++){
product = arr[i]*arr[i+1]*arr[i+2]*arr[i+3]*arr[i+4]*arr[i+5]*arr[i+6]*arr[i+7]*arr[i+8]*arr[i+9]*arr[i+10]*arr[i+11]*arr[i+12] ;
if (maxi < product){
maxi = product ;
}
}
cout << maxi << endl ;
return 0 ;
}
代码对我来说似乎很好,我一直得到 2091059712 输出,问题正在拒绝。请问你能找出异常吗
解决方案
您的数组元素是 type int
,因此它们的乘法是使用int
-- 即使结果被分配给 a long long int
,这不会影响计算。这会导致溢出,因为在最坏的情况下,13 位数字的乘积可能高达 13^9 = 2541865828329 超过INT_MAX
,这可能是 2^31 - 1。也许long long int
用于数组类型,或者将元素转换为更大在将它们相乘之前为 int 类型。
推荐阅读
- django - 在 heroku 上,celery beat 数据库调度程序不运行定期任务
- java - 为什么clone()函数在构造函数中赋值时会显示不兼容的类型?
- python - 如何抓取基于 word press 的页面?分别如何登录请求用户名和密码的页面
- java - 使用 cURL 从我的 API 获取 XML 和 JSON 数据
- intel - 操作系统开发:尝试启用分页时出现三重故障
- c++ - Xcode 调试器只显示一些变量的值。如何纠正这种行为?
- opencv - Red Hat 7 中的机器人框架 Sikuli 库安装缺少“opencv_java”库
- c# - C# 控制台应用程序尝试连接到 AWS Cassandra 服务?
- javascript - 立即将输入值保存到变量中
- javascript - 在 SIRV S3 NodeJs 中的文件夹之间移动图像