回 帖 发 新 帖 刷新版面

主题:为什么会溢出呢???

#include <iostream>
using namespace std;
int main(){
    const int n=20;
    int a[n][6];
    int number=0,sum=0;
    for(int i=0;i<n;i++)
    {for(int j=0;j<6;j++)
    cin>>a[i][j];
    if(a[i][0]==0&&a[i][1]==0&&a[i][2]==0&&a[i][3]==0&&a[i][4]==0&a[i][5]==0)
    break;}
    for(int i=0;i<n;i++)
    {sum=a[i][0]+4*a[i][1]+9*a[i][2]+a[i][3]*16+25*a[i][4]+a[i][5]*36;
    if(sum%36==0)number=sum/36;
    else number=sum/36+1;
    if(number!=0)cout<<number<<endl;
    }
    system("pause");
    return 0;
    }
9 9 9 9 9 0
8 8 8 8 8 8
0 0 0 0 0 0
14
21
5409212
15103493
48711581
6062957
49753090
22696487
-28013654
25446250
2133004
15853678
-5726599
57574690
-33567332
42116614
-13882448
-5435708
-17373341//
//
9 9 9 9 9 0
8 8 8 8 8 8
0 0 0 0 0 0
14
21
本来只有这些数的,
后面的数怎么出来的

回复列表 (共4个回复)

沙发

int a[n][6];你声明了一个20行6列的数组,而且没有初始化
当你输入0 0 0 0 0 0时,满足条件if(a[i][0]==0&&a[i][1]==0&&a[i][2]==0&&a[i][3]==0&&a[i][4]==0&a[i][5]==0),所以break循环跳出,因而你没有继续输入数据来初始化数组剩下的元素,这些元素的值是未知的,而,当你下面计算sum=a[i][0]+4*a[i][1]+9*a[i][2]+a[i][3]*16+25*a[i][4]+a[i][5]*36;时,取到数组前三列的值是合法的,因为那三列数是你输入的,但当取第4到第20行的数据时,由于那些元素你没有初始化赋值,所以值是未知,通常是一个很大的无法预测的数值,因此你计算的sum也就理所当然是一个无法预测的值,程序本来有20行,因为第三行的sum=0没有输出,所以输出19行,这不是溢出问题,是没有初始化问题

板凳

ls正解。所以比较好的习惯是用int a[n][6]={0};一次初始化为全0
另外代码对齐风格不太好,很多地方没有缩进。待改进

3 楼

另一个解决办法就是在你的输出循环
if(number!=0)cout<<number<<endl;
这里改写成
if(number!=0)
  cout<<number<<endl;
else
  break;

4 楼


谢谢各位大虾的指点!

我来回复

您尚未登录,请登录后再回复。点此登录或注册