1036:A×B问题

1036:A×B问题

时间限制: 1000 ms    内存限制: 65536 KB

【题目描述】

输入两个正整数A和B,求A×B的值。注意乘积的范围和数据类型的选择。

【输入】

一行,包含两个正整数A和B,中间用单个空格隔开。1≤A,B≤50000。

【输出】

一个整数,即 A×B 的值。

【输入样例】

3 4

【输出样例】

12

说明:

主要考查对整型取值范围的理解。

思路分析:

如果直接变量使用int类型,提交后有个别测试点没通过,原因是变量取值问题。

题目已指明A和B的取值最小是1,最大是50000。先看最小值,如果A和B都为1,那么A×B的结果为1,不会溢出。而如果A和B都为50000,那么A×B的结果为2500000000。

int类型一般的取值范围:

-2147483648 ~ 2147483647

2500000000

2147483647

经过对比,很明显已超出int类型的取值范围。所以变量的类型应取unsigned类型或long long类型。一般long类型的取值范围与int类型的取值范围一样,所以不要选择long类型。

延伸学习:

溢出:在这里可以简单地理解为,是指超出指定类型的取值范围。例如超出int类型的最小值或最大值,即在int类型取值范围之外。

unsigned:unsigned是unsigned int的简写,是无符号int类型,而一般的int类型是有符号的。unsigned的取值范围:0 ~ 4294967295。

long long:long long是long long int的简写,是有符号的类型。取值范围:-9223372036854775808 ~ 9223372036854775807。

求解过程:

声明2个unsigned类型变量A和。

输入2个整数给变量A和B。

输出变量A的值。

参考代码 - C++:

#include <iostream>
using namespace std;
int main()
{
    unsigned A, B;
    cin >> A >> B;
    cout << A * B;
    return 0;
}

参考代码 - C语言:

输入和输出unsigned类型变量时,应使用"%u"。
#include <stdio.h>
int main()
{
    unsigned A, B;
    scanf("%u %u", &A, &B);
    printf("%u", A * B);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值