using System;
using System.Text;
namespace ConsoleApplication1
{
internal class Program
{
public static void Main(string[] args)
{
var result = "1";
for (var i = 2; i < 101; i++)
{
result = GetResult(result, i.ToString());
}
Console.WriteLine(result.Length);
Console.WriteLine(result);
}
private static string GetResult(string s1, string s2)
{
var lastResult = "";
var ten1 = -1;
var result = new int[s1.Length + s2.Length]; //用以记录计算结果
for (var i = s1.Length - 1; i >= 0; i--)
{
int c1 = Convert.ToInt16(s1[i].ToString()); //从s1中从后往a前取一个数并记录这个数的位置
ten1++;
var resultindex = result.Length - 1 - ten1;
for (var j = s2.Length - 1; j >= 0; j--)
{
int c2 = Convert.ToInt16(s2[j].ToString()); //从?s2中从后往前取一个数
var cc = c1*c2 + result[resultindex];
if (cc > 10)
{
result[resultindex] = cc%10;
var lastindex = resultindex - 1; //往前移动一位
var lastvalue = result[lastindex] + cc/10; //把刚刚得到的十位的数字赋值到前面
while (cc > 10)
{
cc = result[lastindex] + cc/10;
result[lastindex] = cc%10;
lastindex--; //进位
}
}
else
{
result[resultindex] = cc;
}
resultindex--; //进位
}
}
var sb = new StringBuilder();
foreach (var item in result)
{
sb.Append(item);
}
lastResult = sb.ToString();
if (lastResult[0] == '0')
{
lastResult = lastResult.Substring(1);
}
return lastResult;
}
}
}