题目链接
题目描述
这是一个函数实现题。你需要在一个指定的类(Solution
)中,完成一个名为 aTimesB
的函数。该函数接收两个 int
类型的参数,你需要计算这两个整数的乘积,并将结果作为函数的返回值。
关键点:注意函数的返回类型是 long
或 long long
,这意味着乘积结果可能会超出 int
类型的表示范围。
平台工作模式:
- 你只需要填写
aTimesB
函数的内部逻辑。 - 评测系统会自动调用你的函数并验证其返回值。
- 你不应该编写
main
函数或任何输入/输出代码。
示例:
- 输入:
1000000000, 2000000000
(由平台处理) - 你的函数被调用:
aTimesB(1000000000, 2000000000)
- 你的函数应返回:
2000000000000000000
(这是一个long long
或long
类型的值)
解题思路
这道题的核心是处理整数溢出 (Integer Overflow)。
-
识别溢出风险: 两个
int
类型的变量相乘,其结果的大小可能超过一个int
所能存储的最大值。例如,在大多数系统中,int
是32位的,最大值约为。而示例中
,这个结果远超
int
范围,但可以被64位的长整型 (long long
in C++,long
in Java) 存储。 -
防止计算过程中的溢出: 仅仅将函数的返回类型声明为长整型是不够的。如果你直接计算
Number1 * Number2
,这个乘法会先在int
类型下进行,如果结果溢出,就会得到一个错误的int
值,然后再将这个错误的值赋给长整型。正确的做法是,在进行乘法运算之前,就将其中至少一个操作数强制类型转换 (cast) 为长整型。这样,整个乘法表达式就会在长整型的规则下进行计算,从而得到正确的完整结果。
- C++/Java:
(long long)Number1 * Number2
这样,
Number1
首先被提升为长整型,然后与Number2
相乘,Number2
也会被自动提升为长整型,整个运算就不会溢出。 - C++/Java:
-
Python 的特殊性: Python 的
int
类型支持任意精度,它会自动处理大数,不存在溢出问题。因此,在 Python 中直接相乘即可。
代码
注意:以下代码是你需要提交的全部内容,直接在牛客网给定的模板中填写 // write code here
部分即可。
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 计算两个参数的乘积
* @param Number1 int整型
* @param Number2 int整型
* @return long长整型
*/
long long aTimesB(int Number1, int Number2) {
// write code here
// 必须先将其中一个数转换为 long long,否则 int * int 的结果会溢出
return (long long)Number1 * Number2;
}
};
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 计算两个参数的乘积
* @param Number1 int整型
* @param Number2 int整型
* @return long长整型
*/
public long aTimesB (int Number1, int Number2) {
// write code here
// 必须先将其中一个数转换为 long,以避免 int * int 溢出
return (long)Number1 * Number2;
}
}
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 计算两个参数的乘积
# @param Number1 int整型
# @param Number2 int整型
# @return long长整型
#
class Solution:
def aTimesB(self, Number1: int, Number2: int) -> int:
# write code here
# Python 的 int 可以处理任意大的整数,不会溢出
return Number1 * Number2
算法及复杂度
- 算法: 基本算术运算(考虑数据类型)。
- 时间复杂度:
。整数乘法是一个基本的CPU指令,花费的时间是常数。对于Python中的大数运算,其复杂度略高,但通常也视为常数时间。
- 空间复杂度:
。函数调用过程中没有使用任何与输入大小相关的额外空间。