1、整型越界问题
在编程过程中经常会遇到输出值在类型区间之外,越界的情况,解决方法如下
- 转为log求解
改变数据类型,如int转为long long扩大整型边界
long long本质上还是整型,只不过是一种超长的整型。
int型:32位整型,取值范围为-2^31 ~ (2^31 - 1) .
long:在32位系统是32位整型,取值范围为-2^31 ~ (2^31 - 1);在64位系统是64位整型,取值范围为-2^63 ~ (2^63 - 1)
long long:是64位的整型,取值范围为-2^63 ~ (2^63 - 1)使用大树方法进行运算(这个有点难,需要仔细琢磨)
2、各种输入分析
1、一行包括多个数据,数据个数知道,用空格分开
vector<int> input;
while(n--)
{
int a;
cin>>a;
input.push_back(a);
}
2、输入未知行数的字符串
string a;
vector<string> aa;
while(cin>>a)
{
aa.push_back(a);
a.clear();
}
3、输入行数已知的成对值
vector<pair<int,int>> input;
while(n--)
{
int a,b;
cin>>a>>b;
input.push_back(make_pair(a,b));
}
4、输入用空格隔开未知个数的数字
vector<int> input;
int main()
{
int n;
while (getchar()!='\n')
{
scanf_s("%d", &n);
input.push_back(n);
}
}
上述方法因为使用getchar的原因,第一个输入的数字不会保存下来,改进代码如下:
vector<int> input;
int main()
{
do
{
int n;
cin >> n;
input.push_back(n);
} while (getchar() != '\n');
return 0;
}
5、输入多行,多列的二维数组(相当于行列数给定已知,每一行的值用空格隔开,换行符表示下一行输入)
vector<vector<int>> all;
vector<int> input;
int main()
{
int r, c;
cin >> r >> c;
cin.ignore();
while (r--)
{
int col = c;
while (col--)
{
int x;
cin >> x;