程序设计中的数学思维函数总结(代码以C#为例)

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

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

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

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

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

        /// <summary>
        /// 判断一个整数是不是奇数
        /// </summary>
        /// <param name="n">要判断的整数</param>
        /// <returns>是否奇数</returns>
        static bool IsOdd(int n)
        {
            //不能被2整除,则为奇数
            if (n % 2 != 0)
            {
                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 = 2; i < n; i++)
            {
                //如果存在能整除n的数,则返回false
                 if(n%i==0)
                 {
                     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 = 0;
            //在大于等于2到小于n的范围内,寻找是否存在能整除n的数
            for (int i = 2; i < n; i++)
            {
                //如果存在能整除n的数,则sum自增1
                 if(n%i==0)
                 {
                     sum++;
                 }
            }
            //循环结束,如果sum大于0,则代表不是质数,返回false;否则是质数,返回true
            if (sum > 0)
            {
                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 = 1;
            for (int i = 1; i < len; i++)
            {
                power *= 10;
            }
            //定义sum,赋值为各位数的len次幂之和
            int sum = 0;
            for (int j = 1; j <= power; j*=10)
            {
                //定义multiple,赋值为各位数的len次幂
                int multiple = 1;
                for (int i = 1; i <=len; i++)
                {
                    multiple*=n / j % 10;
                }
                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-1; i >= 0; 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 == 1 || n == 2)
            {
                return 1;
            }
            else
            {
                return FibonacciSequence(n - 1) + FibonacciSequence(n - 2);
            }
        }

6.阶乘

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

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

        /// <summary>
        /// 计算阶乘
        /// </summary>
        /// <param name="str">正整数</param>
        /// <return>阶乘结果</return>>
        static int Factorial(int n)
        {
            if (n == 1)
            {
                return 1;
            }
            else
            {
                return n*Factorial(n - 1);
            }
        }
时间: 2024-07-30 10:18:38

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

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

1.变参函数 变长参数的函数即参数个数可变.参数类型不定 的函数.最常见的例子是printf函数.scanf函数和高级语言的Format函数.在C/C++中,为了通知编译器函数的参数个数和类型可变(即是不定的.未知的),就必须以三个点结束该函数的声明. 1 // printf函数的声明 2 int printf(const char * _Format, ...); //const char * _Format是格式控制,控制有多少个%d...,确定输出的个数与类型 3 4 //scanf函数声

【图像处理中的数学修炼】一书之代码(1/3)

数字图像处理对数学的要求颇高,这不禁令很多学习者望而却步.在阅读图像处理方面的论文时,面对梯度.散度.黑塞矩阵.傅里叶变换等这些本该在微积分中早已耳熟能详的概念时,很多人仍然感觉一筹莫展.为了弭平图像处理道路上的数学险阻,帮助更多人学好数字图像处理,并更快地具备深入研究的能力.笔者特别撰写了这本<图像处理中的数学修炼>(该书现已由清华大学出版社正式出版).欲了解<图像处理中的数学修炼>的更多详细内容,你可以参考本书的目录. 通常,我不喜欢翻开一本技术书,里面满篇满篇的都是代码.我也

Javascript中,数学方法可以分成以下几类: constans(常数)、power functions(乘方函数)、trigonometic functions(三角函数)、rounding functions(舍入函数)、random numbers(随机数字)

在Javascript中,数学方法可以分成以下几类: constans(常数).power functions(乘方函数).trigonometic functions(三角函数).rounding functions(舍入函数).random numbers(随机数字) 常数和乘方函数 Math.E 自然对数的底(为常数) 2.718 Math.LN10 10的自然对数 2.302 Math.LN2 2的自然对数 0.693 Math.PI 圆周率 3.1415 Math.SQRT1_2 1/

图像处理中的数学原理详解19——函数的极限

欢迎关注我的博客专栏"图像处理中的数学原理详解" 全文目录请见 图像处理中的数学原理详解(总纲) http://blog.csdn.net/baimafujinji/article/details/48467225 图像处理中的数学原理详解(已发布的部分链接整理) http://blog.csdn.net/baimafujinji/article/details/48751037 1.1.3 函数的极限 本小节介绍两个重要的函数极限,并讨论它们的应用. 重要极限1: 此外,该重要极限的

《程序员的数学思维修炼》 读书笔记

电子书定价:     ¥ 45.00       这是什么?                     纸书定价:     ¥ 45.00       Kindle电子书价格:     ¥ 1.99                   为您节省:     ¥ 43.01      (0.4折)            ~ 周颖   等 (作者) 发售日期: 2014年4月1日 本书是一本专门为程序员而写的数学书,介绍了程序设计中常用的数学知识.本书门槛不高,不需要读者精通很多高深的数学知识,只需要读

数学思维和逻辑能力

在无数个辗转反侧.难以入寐的夜晚,我用力地思考着一个问题:到底要不要走上编程这一条道路?想要成为一个合格的编程人员,深谙编程之道,这条路并不好走.或枯燥无味,或心力憔悴,但亦能寻到其中乐趣,发现常人难以发现的背后之美.所以,痛定思痛,决定搭上这辆于我而言的编程末班车. 接触编程,很多人第一个想法就是选择一门什么程序设计语言,我也为之苦恼了很久.找寻一圈,最后回到起点,发现了一个更加重要的东西:编程本身的思想.就此,我打一个简单的比方:学习程序设计就好比学习射击,编程语言就好比我们手里紧紧握住的枪

树结构在程序设计中的运用

                                                                                引言 近年来,由于各种竞赛纷纷采用free-pascal,因此对于算法来说,空间效率上的要求降低了,而对时间效率却提出了更高的要求.这使得选手不仅要娴熟地掌握常规算法,而且要大胆创新,构造更高效的算法来解决问题. 在以往的程序设计中,链式结构采用得较多.的确链式结构有编程复杂度低.简单易懂等优点,但有一个致命的弱点:相邻的两个元素间的联系

IIFE-js中(function(){…})()立即执行函数写法理解

介绍IIFE IIFE的性能 使用IIFE的好处 IIFE最佳实践 jQuery优化 在Bootstrap源码(具体请看<Bootstrap源码解析>)和其他jQuery插件经常看到如下的写法: Js代码   +function ($) { }(window.jQuery); 这种写法称为: IIFE (Imdiately Invoked Function Expression 立即执行的函数表达式). 一步步来分析这段代码. 先弄清函数表达式(function expression)和 函数

shell脚本中的数学运算

shell中的赋值和操作默认都是字符串处理,在此记下shell中进行数学运算的几个特殊方法.以后用到的时候能够来看,呵呵 1.错误方法举例 a) var=1+1 echo $var 输出的结果是1+1,悲剧,呵呵 b) var=1 var=$var+1 echo $var 输出结果是1+1.依旧悲剧,呵呵 2.正确方法 1)使用let var=1 let "var+=1" echo $var 输出结果为2.这次没有悲剧 注意: a)经我測试let差点儿支持全部的运算符,在网上看到一篇文