此篇文章记录于2018年笔者当时校招之路
时过一年,又是一轮毕业季,故放出此私密文章,为广大应届生分享笔者当时校招之路,虽因种种原因,与华为失之交臂。
输入一个整数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;
}