学习笔记几个小算法练习:1!n!求和,Fibonacci数列,完全数,水仙花数,回文数

1. 求1!-n!之和,即1!+2!+3!+...+(n-1)!+n

代码
int sum;
int factorial;
while (true)
{
Console.Write(
"请输入一个整数数字(输入exit退出): ");
string input = Console.ReadLine().Trim();
if (input.ToLower() == "exit")
{
break;
}
else
{
int n = Convert.ToInt32(input);//略掉验证
sum = 0;
factorial
= 1;
for (int i = 1; i <= n; i++)//控制数字增长
{
factorial
= 1;
for (int j = 1; j <= i; j++)
{
factorial
*= j;
}
sum
+= factorial;
}
Console.WriteLine(
"The factorial of number n is: " + sum.ToString());
}
}

2. 输出Fibonacci数列的前n位数, 如1,1,2,3,5,8....

代码
string input = "";
int n;
int f1;
int f2;
while (true)
{
Console.Write(
"请输入要显示斐波那契数列(Fibonacci)的位数(偶数), 输入exit退出: ");
input
= Console.ReadLine().Trim();
if (input.ToLower() == "exit")
{
break;
}
else
{
n
= Convert.ToInt32(input);
f1
= 1;//f1为第一项, 即第奇数项
f2 = 1;//f2为偶数位, 即第偶数项
for (int i = 1; i <= n/2; i++)//斐波那契树立每次出项2个, 所以位数n需要除以2
{
Console.Write(f1
+ "," + f2 + ",");
f1
= f1 + f2;
f2
= f2 + f1;
}
Console.Write(
"\n");
}
}

3. 若一个数恰好等于它的因子之和, 则称这个数为"完全数", 如: 6的因子为1,2,3,因子之和为1+2+3=6; 28的因子为1,2,4,7,14,因子之和为28. 编程求解整数n之内的所有完全数.

代码
string input = "";
int n;
int sum;
while (true)
{
Console.Write(
"请输入要输出的完全数的最大值n(输入exit退出)");
input
= Console.ReadLine().Trim();
if (input.ToLower() == "exit")
{
break;
}
else
{
n
= Convert.ToInt32(input);
for (int i = 1; i <= n; i++)
{
sum
= i;//暂存当前数字, 例如: 6
for (int j = 1; j <i; j++)//这里不能取=号
{
if (i % j == 0)//找到一个因子
{
sum
-= j;//根据因子之和等于该数来确定的条件. 如: 6 = 1+2+3, 每找到一个因子就可以减去它, 直到结果为0为止
}
}
if (sum == 0)
{
Console.Write(i
+ ",");
}
}
}
}

4. 水仙花数是一个n(>=3)位数字的数, 它等于每个数字的n次幂之和. 例如, 153是一个水仙花数, 153=1³+5³+3³. 编写程序, 求解小于1000的所有水仙花树.

代码
int d3, d2, d1;
for (int i = 100; i < 1000; i++)
{
d3
= i / 100;//分离出百位, 如:987/100=9(9.87)
d2 = i / 10 % 10;//分离出十位, 如:987/10=98(98.7) , 98%10 = 8;
d1 = i % 10;//分离出个位, 如: 987%10 = 7
if (d3 * 100 + d2 * 10 + d1 == d3 * d3 * d3 + d2 * d2 * d2 + d1 * d1 * d1)
{
Console.Write(i
+",");
}
}

5. 回文整数是指正读和反读相同的整数, 如:1,11,121,1221,12321...等, 编写程序, 输入一个整数并判断它是否为回文整数.

代码
string input = "";
int num;
int d5, d4, d3, d2, d1;
while (true)
{
Console.Write(
"输入一个1至99999之间的数(输入exit退出): ");
input
= Console.ReadLine().Trim();
if (input.ToLower() == "exit")
{
break;
}
else
{
num
= Convert.ToInt32(input);
if (num <= 99999 && num >= 1)
{
d5
= num / 10000;//分离万位数, 如: 98765 /10000 = 9(9.8765)
d4 = num / 1000 % 10;//分离千位数, 如: 98765 / 1000 =98(98.765), 98%10 = 8 注: d4 = num%10000/1000; 也可
d3 = num / 100 % 10;//分离百位数, 如: 98765 / 100 =987(987.65), 987%10 = 7 注: d3 = num%1000/100; 也可
d2 = num / 10 % 10;//分离十位数, 如: 98765 / 10 =9876(9876.5), 9876%10 = 6 注: d2 = num%100/10; 也可
d1 = num % 10;//分离个位数, 如: 98765%10 = 5
if (d5 != 0)
{
Console.WriteLine(
"五位数");
if (d1 == d5 && d2 == d4)
{
Console.WriteLine(num
+ "是回文数! ");
}
else
{
Console.WriteLine(num
+ "不是回文数! ");
}
}
else if (d4 != 0)
{
Console.WriteLine(
"四位数");
if (d1 == d4 && d2 == d3)
{
Console.WriteLine(num
+ "是回文数! ");
}
else
{
Console.WriteLine(num
+ "不是回文数! ");
}
}
else if (d3 != 0)
{
Console.WriteLine(
"三位数");
if (d1 == d3)
{
Console.WriteLine(num
+ "是回文数! ");
}
else
{
Console.WriteLine(num
+ "不是回文数! ");
}
}
else if (d2 != 0)
{
Console.WriteLine(
"二位数");
if (d1 == d2)
{
Console.WriteLine(num
+ "是回文数! ");
}
else
{
Console.WriteLine(num
+ "不是回文数! ");
}
}
else if (d1 != 0)
{
Console.WriteLine(
"一位数");
Console.WriteLine(num
+ "是回文数! ");
}
}
else
{
Console.WriteLine(
"输入数字超范围! ");
}
}
}
原文地址:https://www.cnblogs.com/cs_net/p/1832105.html