最近以C#为例,学习了程序设计基础,其中涉及到一些数学思维,我们可以巧妙的将这些逻辑问题转换为代码,交给计算机运算。

现将经常会使用到的基础函数做一总结,供大家分享、自己备用。

1.判断一个数是否为奇数

定义:整数中,能被2整除的数是偶数,不能被2整除的数是奇数

思路点:n%2!=0则为奇数

        /// <summary>
/// 判断一个整数是不是奇数
/// </summary>
/// <param name="n">要判断的整数</param>
/// <returns>是否奇数</returns>
static bool IsOdd(int n)
{
//不能被2整除,则为奇数
if (n % != )
{
return true;
}
//否则不为奇数
else
{
return false;
}
}

2.判断一个数是否为质数

定义:在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为质数。

方法一:查找法

思路点:设置循环,i大于等于2且小于n,若存在n%i==0的数,则不是质数

        /// <summary>
/// 判断一个整数是不是质数
/// </summary>
/// <param name="n">大于1的自然数</param>
/// <returns>是否质数</returns>
static bool IsPrime(int n)
{
//在大于等于2到小于n的范围内,寻找是否存在能整除n的数
for (int i = ; i < n; i++)
{
//如果存在能整除n的数,则返回false
if(n%i==)
{
return false;
}
}
//循环结束,未找到能整除n的数,则返回true
return true;
}

方法二:计数法

思路点:设置循环,i大于等于2且小于n,若存在n%i==0的数,则进行计数;循环结束后,计数大于0,则不是质数

        /// <summary>
/// 判断一个整数是不是质数
/// </summary>
/// <param name="n">大于1的自然数</param>
/// <returns>是否质数</returns>
static bool IsPrime(int n)
{
//设置变量sum,用于保存能整数n的数的数量
int sum = ;
//在大于等于2到小于n的范围内,寻找是否存在能整除n的数
for (int i = ; i < n; i++)
{
//如果存在能整除n的数,则sum自增1
if(n%i==)
{
sum++;
}
}
//循环结束,如果sum大于0,则代表不是质数,返回false;否则是质数,返回true
if (sum > )
{
return false;
}
else
{
return true;
}
}

3.判断一个数是否为自幂数

定义:一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153),3位数的3次幂数称为水仙花数。

思路点:a.将要判断的正整数转换为string类型,得到位数len;

b.将正整数%10得到个位,/10%10得到十位,/100%10得到百位,以此类推,直到/10^(len-1)%10得到最大位;

c.将各位数的len次幂相加,判断是否与正整数相等,相等则为自幂数。

        /// <summary>
/// 判断一个数是否为水仙花数
/// </summary>
/// <param name="n">位数大于等于3的正整数</param>
/// <returns>是否水仙花数</returns>
static bool IsNarcissisticNumber(int n)
{
//定义len,赋值为n的位数
int len = (n.ToString()).Count();
//定义power,赋值为10的(len-1)次幂
int power = ;
for (int i = ; i < len; i++)
{
power *= ;
}
//定义sum,赋值为各位数的len次幂之和
int sum = ;
for (int j = ; j <= power; j*=)
{
//定义multiple,赋值为各位数的len次幂
int multiple = ;
for (int i = ; i <=len; i++)
{
multiple*=n / j % ;
}
sum += multiple;
}
//如果sum等于n,则是水仙花数,返回turn;否则不是,返回false
if (n == sum)
{
return true;
}
else
{
return false;
}
}

4.反序输出

定义:将需求从右到左输出在从左到右的输出端

思路点:将字符串看作是char的数组,设置循环,从最后一个元素开始输出,直到输出第一个元素

        /// <summary>
/// 反序输出
/// </summary>
/// <param name="str">需要反序输出的字符串</param>
static void Antitone(string str)
{
for (int i = str.Length-; i >= ; i--)
{
Console.Write(str[i]);
}
}

5.斐波拉契数列

定义:斐波纳契数列以如下被以递归的方法定义:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)

思路点:函数调用自身进行运算

        /// <summary>
/// 查找斐波拉契数列第n位的数
/// </summary>
/// <param name="str">位数</param>
/// <return>斐波拉契数列第n位的数</return>>
static int FibonacciSequence(int n)
{
if (n == || n == )
{
return ;
}
else
{
return FibonacciSequence(n - ) + FibonacciSequence(n - );
}
}

6.阶乘

定义:一个正整数的阶乘,是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!

思路点:函数调用自身进行运算

        /// <summary>
/// 计算阶乘
/// </summary>
/// <param name="str">正整数</param>
/// <return>阶乘结果</return>>
static int Factorial(int n)
{
if (n == )
{
return ;
}
else
{
return n*Factorial(n - );
}
}

程序设计中的数学思维函数总结(代码以C#为例)的更多相关文章

  1. Unity3D中Mathf数学运算函数总结

    引入: 看到一个案例注意到函数Mathf.SmoothDamp的使用,游戏中用于做相机的缓冲跟踪和boss直升机跟踪士兵.该函数是Unity3D中Mathf数学运算函数中的一个.一些游戏使用了smoo ...

  2. JavaScript 中对变量和函数声明提前的演示样例

    如题所看到的,看以下的演示样例(能够使用Chrome浏览器,然后F12/或者右键,审查元素.调出开发人员工具,进入控制台console输入)(使用技巧: 控制台输入时Shift+Enter能够中途代码 ...

  3. QT 中一些数学计算函数

    QT的一些範例中有出現 qmax, qmin 等 math函式的身影,但我在官方文件中卻找不到與 math函式相關的說明,所以我就把函式的source裡面提供的方法整理條列,並且看看還有哪些 math ...

  4. C++ C# python 中常用数学计算函数对比

    1.求x 的n次幂. C++ #include<cmath> f=pow(x,n) C# f=Math.Pow(x,n) python import numpy as np f=np.po ...

  5. 简答的理解C语言中的各种类型函数

    1.变参函数 变长参数的函数即参数个数可变.参数类型不定 的函数.最常见的例子是printf函数.scanf函数和高级语言的Format函数.在C/C++中,为了通知编译器函数的参数个数和类型可变(即 ...

  6. 嵌入式程序设计中C/C++代码的优化

    虽然使软件正确是一个工程合乎逻辑的最后一个步骤,但是在嵌入式的系统开发中,情况并不总是这样的.出于对低价产品的需求,硬件的设计者需要提供刚好足够的存储器和完成工作的处理能力.所以在嵌入式软件设计的最后 ...

  7. C语言中几个常用数学计算函数ceil(), floor(), round()的用法

    最近在实现算法的过程中,遇到了使用几个数学计算函数,感觉挺有意思,就记下来 方便以后使用. ceil(x)返回不小于x的最小整数值(然后转换为double型). floor(x)返回不大于x的最大整数 ...

  8. 嵌入式实时程序设计中C/C++代码的优化

    1 引言 计算机技术和信息技术的高速发展的今天,计算机和计算机技术大量应用在人们的日常生活中,嵌入式计算机也得到了广泛的应用.嵌入式计算机是指完成一种或多种特定功能的计算机系统,是软硬件的紧密结合体. ...

  9. 检查.net代码中占用高内存函数(翻译)

    哈哈,昨天没事做,在CodeProject瞎逛,偶然看到这篇文章,居然读得懂,于是就翻译了一下,当练习英语,同时增强对文章的理解,发现再次翻译对于文章的一些细节问题又有更好的理解.下面是翻译内容,虽然 ...

随机推荐

  1. Vijos 1012 清帝之惑之雍正 平面最近点对(分治)

    背景 雍正帝胤祯,生于康熙十七年(1678)是康熙的第四子.康熙61年,45岁的胤祯继承帝位,在位13年,死于圆明园.庙号世宗. 胤祯是在康乾盛世前期--康熙末年社会出现停滞的形式下登上历史舞台的.复 ...

  2. HDOJ 2209 贪心

    翻纸牌游戏 Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  3. Servlet Filter 中init和destroy问题

    测试源码如下: package com.FilterTest.Filter; import java.io.IOException; import javax.servlet.Filter; impo ...

  4. Android Project和app中两个build.gradle配置的区别

    Android 开发也挺长时间了,从开始就使用的AndroidStudio开发,但是说下来其实自己对AS(AndroidStudio简称)还真的是不了解不深入.好吧,其实我只知道AS是一个相当强大的工 ...

  5. hdu 2612 多终点BFS

    Find a way Problem Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at ...

  6. POJ 3659 Cell Phone Network / HUST 1036 Cell Phone Network(最小支配集,树型动态规划,贪心)-动态规划做法

    POJ 3659 Cell Phone Network / HUST 1036 Cell Phone Network(最小支配集,树型动态规划,贪心) Description Farmer John ...

  7. webgl开发第一道坎——矩阵与坐标变换

    一.齐次坐标 在3D世界中表示一个点的方式是:(x, y, z);然而在3D世界中表示一个向量的方式也是:(x, y, z);如果我们只给一个三元组(x, y, z)鬼知道这是向量还是点,毕竟点与向量 ...

  8. lnk后缀名打开方式

    老娘栽了两次!! 前段时间,设计把设计图发给我,竟然是个后缀"exe"的文件,选择打开方式的时候忘记取消下图勾选: 结果懵逼了... 在网上找了个方法: 1.打开电脑"运 ...

  9. raft协议安全性保证

    分布式系统中主要的问题就是如何保持节点状态的一致性,不论发生任何failure,只要集群中大部分的节点可以正常工作,则这些节点具有相同的状态,保持一致,在client看来相当于一台机器. 一致性问题本 ...

  10. sybase数据库和oracle数据库中字段中含有换行符的解决办法

    最近在做数据库从sybase到oracle的迁移工作,sybase数据库表bcp导出后,通过sqlldr导入到oracle数据库,然后oracle数据库通过spool按照sybase数据库bcp的格式 ...