一个很老土的问题,100!
请教最短,最易读的1到100阶乘代码。呵呵。。。自己想了想没算出来哦。。。
class Program
{
int zore = 3; //用于计算有多少个零
static void Main(string[] args)
{
Program p = new Program();
ArrayList al = p.aa();
al=p.bb(p.bb(al));
foreach (long s in al)
{
Console.WriteLine(s);
}
Console.Read();
}
//分解数组
private ArrayList bb(ArrayList al)
{
ArrayList all = new ArrayList();
Console.WriteLine(al.Count);
if (al.Count % 2 == 0)
{
// Console.WriteLine( "{0} ", al[al.Count / 2]);
all.Add(cc(long.Parse(al[al.Count/2].ToString())));
}
for (int i = 0,j=al.Count-1; i < j;i++,j-- )
{
long sum = long.Parse(al[i].ToString()) * long.Parse(al[j].ToString());
all.Add(cc(sum));
}
return all;
}
//第一次运算,用于取出第一次的零,以及其它数
private ArrayList aa()
{
ArrayList al = new ArrayList();
al.Add(5);
for (int i = 1, j = 99; i < j; i++, j--)
{
long sum = i * j;
al.Add(cc(sum));
}
return al;
}
//取零的方法
private long cc(long sum)
{
while (sum % 10 == 0)
{
zore ++;
sum /= 10;
}
return sum;
}
}
大家别BS我哈。。。
[解决办法]
的算式用字是不行的太大只能用string表示提供思路
任何整相乘者可表示成
n0+n1*10^m1+n2*10^m2...nn*10^mn
n0,n1,n2..nn右到左固定度的字符(可5位)
m1,m2...mn依次n1,n2...nn的始位置
然后依次1到100的相乘(注意相乘后如果超出5位要超出的部分加到下一n上面)