【题目链接】
ybt 1036:A×B问题
OpenJudge NOI 1.3 19:A*B问题
【题目考点】
1. 不同整型数据的范围
类型 | 占用字节数 | 可表示数字范围 |
---|---|---|
char | 1 | -127~128 |
short | 2 | -32,768~32,767 |
unsigned short | 2 | 0~65,535 |
int | 4 | -2,147,483,648~2,147,483,647 |
unsigned int | 4 | 0~4,294,967,295 |
long long | 8 | -9,223,372,036,854,775,808~9,223,372,036,854,775,807 |
unsigned long long | 8 | 0~18,446,744,073,709,551,615 |
2. 整型变量的格式控制符
字符含义:h:短整型 l:长整形 u:无符号
类型 | 格式控制符 |
---|---|
short | hd |
unsigned short | hu |
int | d |
unsigned int | u |
long long | lld |
unsigned long long | llu |
【解题思路】
观察变量范围,A,B满足:1 <= A,B <= 50000。
如果A,B都取50000,相乘得到2500000000,超出了int型可以表示的数字范围
可以用unsigned int或long long类型声明变量,进行计算
注:unsigned int 可以简写为 unsigned
【题解代码】
解法1:声明unsigned int类型变量
#include <bits/stdc++.h>
using namespace std;
int main()
{
unsigned int a, b;
scanf("%u %u", &a, &b);
printf("%u", a * b);
return 0;
}
解法2:声明long long类型变量
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long a, b;
scanf("%lld %lld", &a, &b);
printf("%lld", a * b);
return 0;
}
解法3:使用cin,cout输入输出
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long a, b;//或声明为unsigned int
cin>>a>>b;
cout<<a*b;
return 0;
}