scanf、getchar、gets、cin的区别
sancf()遇到空格、TAB、回车会进行截断获取,固scanf方式读取的内容是一定不会包含空格的
如果要读取包含空格的内容时,需要使用gets
cin的方式也是遇到tab 空格 回车进行截断获取
getchar可以读入一个字符,包含空格,TAB,回车
用malloc申请一个二维数组的办法
int r; // 行数
int c; // 列数
/* 方法一 */
int **arr; // 数组指针
arr = (int**)malloc(sizeof(int*)*r);
for(i = 0;i < r;i++)
arr[i] = (int*)malloc(sizeof(int)*c);
/* 方法二 */
int (*arr)[r] = (int(*)[r])malloc(sizeof(int)*r*c);
/* 方法三 */
// 用一维数组进行模拟
int *arr = (int *)malloc(sizeof(int)*r*c);
// 访问的下标为i,j对应的值为
arr[i*r + j]
避免重复计算,用数组记录中间结果实现阶乘
#define NUM 10 // 存放中间结果数组的大小
int fac[NUM] = {0};
long factorial(int n) {
if (fac[n]) return fac[n];
if (n == 1) {
fac[1] = 1;
return 1;
}
else {
fac[n] = n*factorial(n-1);
return fac[n];
}
}
质数
质数又称素数。一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数;否则称为合数
注意:质数要求大于1,也就是从2开始
c判断是否为素数的代码如下
bool isPrime(unsigned long n) {
if (n <= 3) {
return n > 1;
}
else if (n % 2 == 0 || n % 3 == 0) {
return false;
}
else {
for (unsigned short i = 5; i * i <= n; i += 6) {
if (n % i == 0 || n % (i + 2) == 0) {
return false;
}
}
return true;
}
}
C语言数据类型范围
标准整数类型常见存储空间大小和取值范围
类型 | 存储空间大小 | 最小值 | 最大值 |
---|---|---|---|
unsigned char | 1个字节 | 0 | 255 |
signed char | 1个字节 | -128 127 | |
int | 2个或4个字节 | -32 768 或 -2 147 483 648 | 32767 或 2 147 483 647 |
unsigned int | 2个或4个字节 | 0 | 65 535 或 4 294 967 295 |
short | 2个字节 | -32 768 | 32 767 |
unsigned short | 2个字节 | 0 | 65 535 |
long | 4个字节 | -2 147 483 648 | 2 147 483 647 |
unsigned long | 4个字节 | 0 | 4 294 967 295 |
long long (C99) | 8个字节 | -9 223 372 036 854 775 808 | 9 223 372 036 854 775 807 |
Unsigned long long (C99) | 8个字节 | 0 | 18 446 744 073 709 551 615 |