c#求n的阶乘,附加要求是:1:当输入无关字符时,程序给出提醒重新输入;2:输入一个数求得阶乘后。。

输入一个数求得阶乘后,不用退出运行即可输入下一个数求得其阶乘,知道手动退出运行为止。3:int有最大值,需要规定最大值。 。。求大侠帮助!在线等!

当初始数值很大的时候,结果只能采用科学表示法来输出了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-06
 static void Main(string[] args)
        {
            while (true)
            {
                Console.WriteLine("请输入一个整数:");
                string str = Console.ReadLine();
                int number = 0;
                bool result = int.TryParse(str, out number);
                if (!result)
                {
                    Console.WriteLine("输入字符无效,请重新输入");
                }
                else
                {
                    if (number < 0)
                    {
                        Console.WriteLine("不可为负数,请重新输入");
                    }
                    if (number > int.MaxValue)
                    {
                        Console.WriteLine("输入的数字大于了最大整数,请重新输入");
                    }
                    else
                    {
                        Console.WriteLine("{0}的阶层是:{1}", number, GetResult(number));
                    }
                }
                Console.WriteLine();
            }
        }

        public static int GetResult(int number)
        {
            if (number == 0 || number == 1)
                return 1;
            return number * GetResult(number - 1);
        }

追问

大侠,谢谢你!我运行了,从1到25都是可以的,26、28、29等的阶乘变成了负数,而且后面的数的阶乘看着不对,还有阶乘是0的,求教啥原因?

追答

因为整型的范围有限,26的阶层超过了他的范围
public static double GetResult(int number)
{
if (number == 0 || number == 1)
return 1;
return number * GetResult(number - 1);
}
改成double会好点,不过结果是科学计数法,只能计算到170的阶层,再大就是正无穷了

本回答被提问者采纳
第2个回答  2013-08-06
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入0-100之间的整数,回车键继续.");
Console.WriteLine("退出程序,请输入'exit',回车键退出.");
while (true)
{
String inputstring = Console.ReadLine();
if (inputstring.Equals("exit"))
{
return;
}
int inputnumber = 0;

if (!Int32.TryParse(inputstring, out inputnumber))
{
Console.WriteLine("输入的不是有效的整数,请重新输入。");
continue;
}

//还有小于规定的最大值的判断

int sum = 1;

for (int i = 1; i <= inputnumber; i++)
{
sum = sum * i;
}
Console.WriteLine(inputstring + "的阶乘结果为:" + sum);
}
}
}追问

大侠,你这个程序我也运行了,可是前面的数字还是对的,到了26那儿 ,就开始是负数啊,或者就不对,输入八九十的数,就说阶乘是0,求教啥原因?

追答

那是因为数太大了,超过了整形的取值范围,我在帮你本地测一下。

整了一会,对大数的操作比较麻烦。
网上有个例子,你看下吧
http://www.cnblogs.com/snowdust/archive/2010/03/18/1688963.html

相似回答