娱乐篇~最近挺火的520遍我爱你源码和利用大数计算1~50的阶乘

首先有了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;
}

运行结果:
在这里插入图片描述

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值