【8】剑指offer-大数运算

【1】题目

10000的阶乘怎么算?

答:“10000”这个数字太大了,无论用什么数据类型保存结果都会溢出。现在使用数组来模拟数字,这样无论结果数字有多大,只要数组的长度够长就能表示出来,用这个办法可以进行大数据的运算。

【2】思路

用大数运算方法,数组存放。

【3】代码


#include <stdio.h>
#include <iostream>
#include<vector>
#include<time.h>

using namespace std;


int main()
{
	int a[20001];//储存每一位所得到的数 
	int temp, digit, n, i, j = 0;//temp每次的得数   digit每次得数的位数  
	scanf_s("%d", &n);//scanf用途:从键盘输入数据,从键盘得到字符,放到某个变量里。
	a[0] = 1;//从1开始乘 
	digit = 1;//位数从第一位开始 
	for (i = 2; i <= n; i++)//从1开始到n的循环遍历
	{
		int num = 0;
		for (j = 0; j < digit; j++)
		{
			temp = a[j] * i + num;//将一个数的每一位数都分别乘以i, 
			a[j] = temp % 10;//将一个数的每一位数利用数组进行储存,取余数
			num = temp / 10;//取除数
		}
		while (num)//判断退出循环后,num的值是否为0 
		{
			a[digit] = num % 10;//继续储存 
			num = num / 10;
			digit++;
		}
	}
	for (i = digit - 1; i >= 0; i--)//倒序输出每一位 
		printf("%d", a[i]);
	printf("\n");
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值