分享C++部分函数/格式/算法03

分享C++部分函数/格式/算法03

    • 作业
        • 三的倍数
        • 数数
        • 过目不忘
    • 入门3
        • 数据范围
        • 数据大小
        • if进阶1
        • if进阶2
    • 练习&挑战
        • 神奇数
        • a+b
        • 性质判断
        • [挑战]x+y

前期回顾
分享C++部分函数/格式/算法01
分享C++部分函数/格式/算法02

作业

三的倍数
分析:使用输入和输出,再用取余号即可
参考代码:
#include
using namespace std;
int main() {
	int n;
	cin>>n;
	if(n%3==0)cout<<"Yes";
	else cout<<"NO";
	return 0;
}
数数
分析:使用输入和输出+for循环即可
#include
using namespace std;
int main() {
	int n;
	for(int i=1;i<=n;i++)cout<<i<<endl;
	return 0;
}
过目不忘
分析:使用for输入和输出,使用数组存储数据/输入一个输出一个
参考代码1:
#include
using namespace std;
int main() {
	int n,a[1009];//不建议,题目没说n的范围
	cin>>n;
	for(int i=0;i<n;i++)cin>>a[i];
	for(int i=0;i<n;i++)cout<<a[i]<<endl;
	return 0;
}
参考代码2:
/*这种方法虽然能解决很多情况,但在DEVC++运行时有可能看起来不好看:
2	//n
2	//a
2	//cout
3	//a
3	//cout
就是说,输入元素a时会立刻输出
*/
#include
using namespace std;
int main() {
	int n,a;
	cin>>n;
	for(int i=0;i<n;i++) {
		cin>>a;
		cout<<a<<endl;
	}
	return 0;
}

入门3

数据范围

在前面已经提到了很多种类型,如int,long long等.通常简单的程序我们都会使用int,因为int打起来很方便.可是,当题目数据大时,再用int,就可能会爆精度,也就是数据越界,所也要注意每个数据的大小.
数据范围表(signed正负皆可,unsigned自然数)

类型 范围
char字符型 不能确定,需根据编译器环境而定
bool布尔类型(是否) 0~1
signed char有符号字符型 -128~127
unsigned char无符号字符型 0~255
short短整型(默认为signed short) -32768~32767
unsigned short无符号短整型 0~65,535
int整形(默认为signed int) -2147483648~2147483647
unsigned int无符号整形 0~4294967295
long long长整型(默认为(signed long long) -9,223,372,036,854,775,808~9,223,372,036,854,775,807
unsigned long long long无符号长整型 0~18,446,744,073,709,551,615
float浮点精度型 +/- 3.4e +/- 38 (~7 个数字)
double浮点双精度型 +/- 1.7e +/- 308 (~15 个数字)
long double浮点长双精度型 可提供18-19位有效数字
__int128 128字节超长整形此类型不能用cin,cout,scanf,printf 约-170141183460469231731687303715884105727~约170141183460469231731687303715884105727
数据大小

前面提到了数据范围,有些人会认为,遇到事就立刻用最大精度,但是,这样真的对吗?有风险.
每一个类型都是有空间限制的(以字节为单位),如果你定义了太多变量,就可能会导致爆空间,程序将无法运行.
以win64为标准的数据大小表(加上signed/unsigned所占空间不会不一样,所以就直接是变量了)

类型 大小(字节)
char 1
bool 1
short 2
int 4
long long 8
float 4
double 8
long double 16
__int128 16
if进阶1

其实,if括号里的东东就是bool类型的.
对于bool类型,0表示false(if不执行),1表示true(if执行).
true就是为真,false就是为假.
比方说:

10>2==true
3>=10==false

还有:

4==true
0==false
-5==true

我们都知道,分为三部分:正数,负数0.
bool的值直接被赋值为 正数负数,它会变成1,也就是true;
bool的值直接被赋值为 0,它就是0,也就是false.
这就是bool的越界
其他类型越界会自动减掉其unsigned模式下的最大值(即可能会变成负数)

额,扯得远了

if(5)cout<<5;

这种情况会输出5

if(0)cout<<0;

这种情况不会输出0

if进阶2

如果输入的n既是奇数也是三的倍数,则输出1,否则输出0
按照已有知识可以这样写:

if(n%2==1)
	if(n%3==0)cout<<1;
	else cout<<0;//否则1
else cout<<0;//否则2

额,是不是有点麻烦 TAT
怎么办呢?
可以使用并且&&来完成(注意是两个&)

if(n&2==1&&n%3==0)cout<<1;
else cout<<0;

怎么样,是不是方便多了呢?
再来一种情况:如果n是3的倍数7的倍数,输出1,否则输出0

bool ans=0;
if(n%3==0)ans=1;
if(n%7==0)ans=1;
cout<<ans;

也好麻烦啊!!!
使用||,表示或,可以解决这个问题~

if(n%3==0||n%7==0)cout<<1;
else cout<<0;

练习&挑战

神奇数
假设能同时被1~n整除的数叫做 神奇数 ,输入n和m,如果m是神奇数,输出1;否则,输出0
(提示:此题用 || 解有点麻烦,甚至不能完成)

答案请见下期

a+b
输入a和b(可能是小数,和最大可能会出现15个数字),输出他们的和

答案请见下期

性质判断
输入一个数n,输出n是( 正/负 整数/小数 ).

答案请见下期

[挑战]x+y
输入正整数x和y(0≤10e200≤a,b),输出他们的和

此题下期不会公布答案,会在后面讲到(高精度-大数加法)

你可能感兴趣的:(c++)