常用数据类型对应字节数
可用如sizeof(char),sizeof(char*)等得出
32位编译器:
char :1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
short int : 2个字节 范围:-2^15 ~2^15-1
int: 4个字节 范围:-2^31 ~2^31-1
unsigned int : 4个字节 范围:0 ~2^32-1
float: 4个字节
double: 8个字节
long: 4个字节 范围:-2^31 ~2^31-1
long long: 8个字节 范围:-2^63 ~2^63-1
unsigned long: 4个字节 范围:0~2^32-1
64位编译器:
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节
由于每种数据类型存放的数据都有限制,故一些大数的存放要用到数组,大数阶乘的算法由此应运而生。
算法代码如下:
# include <stdio.h>
# include <string.h>
# define MAX 20000
int main(void)
{
int arr[MAX];
memset(arr, 0, sizeof(arr)); //把数组arr的所有元素初始化为0
arr[0] = 1;
int i, j, m, s;
scanf("%d", &m);
for(i = 2; i <= m; i++)
{
int t = 0;
for(j = 0; j < MAX; j++)
{
s = arr[j] * i + t;//存储计算的结果
arr[j] = s % 10;//把最低为存到数组前面
t = s / 10;//进位
}
}
for(i = MAX - 1; i >= 0; i--)//把0都筛掉
{
if(arr[i]) break;
}
for(j = i; j >= 0; j--)//进行输出
{
printf("%d", arr[j]);
}
printf("\n");
return 0;
}
此代码用于计算阶乘,可以存放0~10000以内阶乘的结果。