首先有了520遍我爱你的代码源码男同胞就不用花数小时打字来感动你们的女神了,嘿嘿。
#define _CRT_SECURE_NO_WARINGS 1
#include<stdio.h>
int main ()
{
int i=0;
for(i=1;i<=520;i++)
printf("%d.我爱你\n",i);
return 0;
}
运行结果:
计算1~50的阶乘难点:
存储问题:
int所能表示的数的范围是-214743648~214743648,而当我们计算四十几的阶乘的时候结果是远大于int所能表示的数的范围,所以我们得利用数组来存这些数字。
int jw, w = 1, t, arr[5000];
int i, j, z;
// Jw为进位 W为位数 arr为大数储存 T储存临时数据
**进位问题:**
数组存数,每一个地址存的是一个位的位数,所以要会有进位问题,所以我利用取余来解决,将一个数对10进行取余,余数留下,再将这个数进行除10,结果进到下一位。
for (i = 1; i <= 50; i++){
for (j = 1, jw = 0; j <= w; j++){
t = arr[j - 1] * i + jw; // 使被拆分为数组的大数的每一项与 i 相乘并且加上进位
arr[j - 1] = t % 10; // 将余数存到当前项中
jw = t / 10; //取进位
}
while (jw){
arr[++w - 1] = jw % 10;
jw /= 10;
}
//当有进位的时候将进位给到下一项
源码如下:
#define _CRT_SECURE_NO_WARINGS 1
#include<stdio.h>
int main()
{
int jw, w = 1, t, arr[5000];
int i, j, z;
// Jw为进位 W为位数 arr为大数储存 T储存临时数据
arr[0] = 1;
for (i = 1; i <= 50; i++){
for (j = 1, jw = 0; j <= w; j++){
t = arr[j - 1] * i + jw; // 使被拆分为数组的大数的每一项与 i 相乘并且加上进位
arr[j - 1] = t % 10; // 将余数存到当前项中
jw = t / 10; //取进位
}
while (jw){
arr[++w - 1] = jw % 10;
jw /= 10;
}
//当有进位的时候将进位给到下一项
for (z = w; z >= 1; z--){
printf("%d", arr[z - 1]);
}
//每次乘以下一个数之前输出当前所有位的数据
printf("\n");
}
return 0;
}
运行结果: