简记华为FX笔试题(三)阶乘

输入一个整数N,输出N!的值,即1*2*3*..*N

但是N!可能很大,超出整数范围,也就是说要用字符串来表示罗。

这涉及一个大数相乘的运算。

关于大数相乘,网上有很多答案,在这里就不单独介绍了,先贴出我的代码,与广大IT友分享,令祝大家早日找到心怡的offer

#include<string>
#include<iostream>
#include<vector>
using namespace std;
string mul(string num1, string num2)
{
	int size1 = num1.size();
	int size2 = num2.size();
	string str(size1 + size2, '0');
	for (int i = size2 - 1; i >= 0; --i)
	{
		int mulflag = 0, addflag = 0;
		for (int j = size1 - 1; j >= 0; --j)
		{
			int temp1 = (num2[i] - '0')*(num1[j] - '0') + mulflag;
			mulflag = temp1 / 10;
			temp1 = temp1 % 10;
			int temp2 = str[i + j + 1] - '0' + temp1 + addflag;
			str[i + j + 1] = temp2 % 10 + 48;
			addflag = temp2 / 10;
		}
		str[i] += mulflag + addflag;
	}
	if (str[0] == '0')
		str = str.substr(1, str.size());
	return str;
} 

int main()
{
	int input;
	while (cin >> input)
	{
		string str = to_string(input);
		string result = "1";
		for (int i = 2; i <= input; i++)
		{
			string tmp = to_string(i);
			result = mul(result, tmp);
		}
		cout << result << endl;
	}
    return 0;
}

猜你喜欢

转载自blog.csdn.net/hjxu2016/article/details/80959363