王道机试练习——高精度N的阶乘

王道机试练习——高精度N的阶乘

题目描述

输入一个正整数 N,输出 N 的阶乘。
输入: 正整数 N(0<=N<=1000)
输出: 输入可能包括多组数据,对于每一组输入数据,输出 N 的阶乘

题目思考

本例中,虽然输入的数据并不大,但是计算的结果却可能非常的大( 1000!), 所以我们依旧需要利用高精度整数来完成计算。本例中涉及的高精度运算即是高 精度乘法。

代码

#include<iostream>
#include<stdio.h>
#include<string>
struct bigInteger {
	int digit[1000];
	int size;
	void init() {//初始化
		for (int i = 0; i < 1000; i++) digit[i] = 0;
		size = 0;
	}
	void set(int x) {//用一个小整数设置高精度整数
		init();
		do {//对小整数4位为一个单位分解依次存入digit中
			digit[size++] = x % 10000;
			x /= 10000;
		} while (x != 0);
	}
	void output() {//输出
		for (int i = size - 1; i >= 0; i--) {
			if (i != size - 1) printf("%04d", digit[i]);
			else printf("%d", digit[i]);
		}
		printf("\n");
	}
	bigInteger operator*(int x) const {//乘法运算符
		bigInteger ret;//将要返回的高精度整数
		ret.init();//初始化
		int carry = 0;//初始化进位值为0
		for (int i = 0; i < size; i++) {
			int tmp = x * digit[i] + carry;
			carry = tmp / 10000;//计算进位
			tmp %= 10000;//去除进位部分
			ret.digit[ret.size++] = tmp;
		}
		if (carry != 0) {//若最高位有进位
			ret.digit[ret.size++] = carry;//保存该进位
		}
		return ret;//返回结果
	}
}a;

int main() {
	int n;
	while (scanf("%d", &n) != EOF) {
		a.init();
		a.set(1);
		for (int i = 1; i <= n; i++) {
			a = a * i;//依次乘上每一个整数
		}
		a.output();//输出a
	}
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值