学习笔记---几个小算法练习: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(
" 输入数字超范围! " );
}
}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值