#1159. 3.判断溢出

3.判断溢出

当前没有测试数据。

3.判断溢出

题目描述

上面的这种错误已经很常见了。我们都知道,即使要把这个乘法的结果赋值给一个更大的数据类型,也要在计算乘法之前先进行类型转换。

而今天我们要解决的问题相对要简单一些。我们将给你一些数和一个数据类型,你需要判断,如果将这些数连续相乘起来,将会在第几个数出现溢出的情况。

输入格式

多组数据。

第一行只有一个整数,表示组数。

每个数据分为两行。

第一行只有一个字符串,表示要检测的数据类型。

第二行有若干正整数,依次表示每一个给出的数,相邻的两个数之间用一个空格隔开。

下面是数据类型的说明表:

输入的字符串 C/C++ 能表示的最大的数
int8 signed char 127
unsigned int8 unsigned char 255
int16 signed short 32767
unsigned int16 unsigned short 65535
int32 signed int 2147483647
unsigned int32 unsigned int 4294967295
int64 signed long long int 9223372036854775807
unsigned int64 unsigned long long int 18446744073709551615

输出格式

对于每个输入数据,输出一行,表示在乘到第几个数的时候溢出了。如果一直都没有溢出,则输出一行nevernever

数据范围与提示

对于所有的输入,每个输入至多含有100100个输入数据,每行至多有100100个整数,每个数均为不会超过102010^{20}的正整数。

此外,以下的测试点还有额外的限制:

对于测试点1122334455,输入中不会出现int64int64unsignedunsigned int64int64,并且输入的每个数都不会超过10910^{9}

对于测试点1122667788,输入中每一行至多有一个数。

样例

4
int32 100000 100000 100000
int16 1 2 3 4 5 6 7 8
unsigned int16 1 2 3 4 5 6 7 8
unsigned int8 23333333 33333333
2
8
never
1  

说明

第一个数据:在第22个数,计算100000×100000100000 \times 100000时溢出了;

第二个数据:在第88个数,计算(前面的结果)5040×85040 \times 8时溢出了;

第三个数据:没有出现溢出;

第四个数据:在第11个数,2333333323333333本身就溢出了。