谁能告诉我如何用计算机编程的语言比如1和0表示出1到10的数字?

作者&投稿:西食 (若有异议请与网页底部的电邮联系)
计算机中0和1是怎么表示所有东西的~

0和1在计算机语言里是二进制,所有的信息将转化为由0和1组成的代码进行存储和传输。
二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。

扩展资料:
计算机中的十进制小数用二进制通常是用乘二取整法来获得的。
比如0.65换算成二进制就是:
0.65 × 2 = 1.3 取1,留下0.3继续乘二取整
0.3 × 2 = 0.6 取0, 留下0.6继续乘二取整
0.6 × 2 = 1.2 取1,留下0.2继续乘二取整
0.2 × 2 = 0.4 取0, 留下0.4继续乘二取整
0.4 × 2 = 0.8 取0, 留下0.8继续乘二取整
0.8 × 2 = 1.6 取1, 留下0.6继续乘二取整
0.6 × 2 = 1.2 取1,留下0.2继续乘二取整
.......
一直循环,直到达到精度限制才停止(所以,计算机保存的小数一般会有误差,所以在编程中,要想比较两个小数是否相等,只能比较某个精度范围内是否相等)。这时,十进制的0.65,用二进制就可以表示为:0.1010011。
参考资料来源:百度百科-二进制

C语言中实现阶乘的计算可以采用递归或者循环,通常循环用的比较多,循环可以采用while循环和for循环等。
下面以for循环为例实现1-10的阶乘的和的计算,代码如下:
int i,sum=1,S=0;
for(i=1;i<=10;i++)
{
sum=sum*i;
S=S+sum;
}
上述的变量S在运行结束后的结果值即为1-10的阶乘的和。

扩展资料:
数学函数
所在函数库为math.h、stdio.h、string.h、float.h
int abs(int i) 返回整型参数i的绝对值
double atof(char *nptr) 将字符串nptr转换成浮点数并返回这个浮点数
double atoi(char *nptr) 将字符串nptr转换成整数并返回这个整数
double atol(char *nptr) 将字符串nptr转换成长整数并返回这个整数
char *ecvt(double value,int ndigit,int *decpt,int *sign),将浮点数value转换成字符串并返回该字符串
参考资料来源:百度百科-C语言函数

本文字数:4894 字
阅读本文大概需要:13 分钟

写在之前

我们都知道,对于同一个问题来说,可以有多种解决问题的算法。尽管算法不是唯一的,但是对于问题本身来说相对好的算法还是存在的,这里可能有人会问区分好坏的标准是什么?这个要从「时效」和「存储」两方面来看。

人总是贪婪的,在做一件事的时候,我们总是期望着可以付出最少的时间、精力或者金钱来获得最大的回报,这个类比到算法上也同样适用,那就是花最少的时间和最少的存储做成最棒的解决办法,所以好的算法应该具备时效高和存储低的特点。这里的「时效」是指时间效率,也就是算法的执行时间,对于同一个问题的多种不同解决算法,执行时间越短的算法效率越高,越长的效率越低;「存储」是指算法在执行的时候需要的存储空间,主要是指算法程序运行的时候所占用的内存空间。

时间复杂度

首先我们先来说时间效率的这个问题,这里的时间效率就是指的算法的执行时间,时间的快慢本来就是一个相对的概念,那么到了算法上,我们该用怎样的度量指标去度量一个算法的时间效率(执行时间)呢?

刚开始我们想出了一种事后统计方法,我称它为「马后炮式」,顾名思义,就是对于要解决的某个问题,费尽心思想了 n 种解法,提前写好算法程序,然后攒了一堆数据,让它们分别在电脑上跑,跑完了然后比较程序的运行时间,根据这个来判断算法时效的高低。这种的判断技术计算的是我们日常所用的时间,但这并不是一个对我们来说有用的度量指标,因为它还依赖于运行的机器、所用的编程语言、编译器等等等等。相反,我们需要的是一个不依赖于所用机器或者编程语言的度量指标,这种度量指标可以帮助我们判断算法的优劣,并且可以用来比较算法的具体实现。

我们的科学家前辈们发现当我们试图去用执行时间作为独立于具体程序或计算机的度量指标去描述一个算法的时候,确定这个算法所需要的步骤数目非常重要。如果我们把算法程序中的每一步看作是一个基本的计量单位,那么一个算法的执行时间就可以看作是解决一个问题所需要的总步骤数。但是由于算法的执行过程又各不相同,所以这个每一步,即这个基本的计量单位怎么去选择又是一个令人头秃的问题。

下面我们来看一个简单的求和的函数:

defget_sum(n): sum = 0for i in range(1,n+1): sum += i return sumprint(get_sum(10))

我们仔细去分析一下上述代码,其实可以发现统计执行求和的赋值语句的次数可能是一个好的基本计数单位,在上面 get_sum 函数中,赋值语句的数量是 1 (sum = 0)加上 n (执行 sum += i 的次数)。

我们一般用一个叫 T 的函数来表示赋值语句的总数量,比如上面的例子可以表示成 T(n) = n + 1。这里的 n 一般指的是「数据的规模大小」,所以前面的等式可以理解为「解决一个规模大小为 n,对应 n+1 步操作步数的问题,所需的时间为 T(n)」。

对于 n 来说,它可以取 10,100,1000 或者其它更大的数,我们都知道求解大规模的问题所需的时间比求解小规模要多一些,那么我们接下来的目标就很明确了,那就是「寻找程序的运行时间是如何随着问题规模的变化而变化」。

我们的科学家前辈们又对这种分析方法进行了更为深远的思考,他们发现有限的操作次数对于 T(n) 的影响,并不如某些占据主要地位的操作部分重要,换句话说就是「当数据的规模越来越大时,T(n) 函数中的某一部分掩盖了其它部分对函数的影响」。最终,这个起主导作用的部分用来对函数进行比较,所以接下来就是我们所熟知的大 O闪亮登场的时间了。

大 O 表示法

「数量级」函数用来描述当规模 n 增加时,T(n) 函数中增长最快的部分,这个数量级函数我们一般用「大 O」表示,记做 O(f(n))。它提供了计算过程中实际步数的近似值,函数 f(n) 是原始函数 T(n) 中主导部分的简化表示。

在上面的求和函数的那个例子中,T(n) = n + 1,当 n 增大时,常数 1 对于最后的结果来说越来不越没存在感,如果我们需要 T(n) 的近似值的话,我们要做的就是把 1 给忽略掉,直接认为 T(n) 的运行时间就是 O(n)。这里你一定要搞明白,这里不是说 1 对 T(n) 不重要,而是当 n 增到很大时,丢掉 1 所得到的近似值同样很精确。

再举个例子,比如有一个算法的 T(n) = 2n^2+ 2n + 1000,当 n 为 10 或者 20 的时候,常数 1000 看起来对 T(n) 起着决定性的作用。但是当 n 为 1000 或者 10000 或者更大呢?n^2 起到了主要的作用。实际上,当 n 非常大时,后面两项对于最终的结果来说已经是无足轻重了。与上面求和函数的例子很相似,当 n 越来越大的时候,我们就可以忽略其它项,只关注用 2n^2 来代表 T(n) 的近似值。同样的是,系数 2 的作用也会随着 n 的增大,作用变得越来越小,从而也可以忽略。我们这时候就会说 T(n) 的数量级 f(n) = n^2,即 O(n^2)。

最好情况、最坏情况和平均情况

尽管前面的两个例子中没有体现,但是我们还是应该注意到有时候算法的运行时间还取决于「具体数据」而不仅仅是「问题的规模大小」。对于这样的算法,我们把它们的执行情况分为「最优情况」、「最坏情况」和「平均情况」。

某个特定的数据集能让算法的执行情况极好,这就是最「最好情况」,而另一个不同的数据会让算法的执行情况变得极差,这就是「最坏情况」。不过在大多数情况下,算法的执行情况都介于这两种极端情况之间,也就是「平均情况」。因此一定要理解好不同情况之间的差别,不要被极端情况给带了节奏。

对于「最优情况」,没有什么大的价值,因为它没有提供什么有用信息,反应的只是最乐观最理想的情况,没有参考价值。「平均情况」是对算法的一个全面评价,因为它完整全面的反映了这个算法的性质,但从另一方面来说,这种衡量并没有什么保证,并不是每个运算都能在这种情况内完成。而对于「最坏情况」,它提供了一种保证,这个保证运行时间将不会再坏了,**所以一般我们所算的时间复杂度是最坏情况下的时间复杂度**,这和我们平时做事要考虑到最坏的情况是一个道理。

在我们之后的算法学习过程中,会遇到各种各样的数量级函数,下面我给大家列举几种常见的数量级函数:

为了确定这些函数哪些在 T(n) 中占主导地位,就要在 n 增大时对它们进行比较,请看下图(图片来自于 Google 图片):

在上图中,我们可以看到当 n 很小时,函数之间不易区分,很难说谁处于主导地位,但是当 n 增大时,我们就能看到很明显的区别,谁是老大一目了然:

O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n)

我们下面就来分析几个上述所说的「数量级函数」:

1.常数函数

n = 100 # 1 次sum = (1 + n) *n / 2 # 1 次print(sum) # 1 次

上述算法程序的 f(n) = 3,可能有人看到这会说那么时间复杂度就是 O(f(n)) = O(3),其实这个是错的,这个函数的时间复杂度其实是 O(1)。这个对于初学者来说是很难理解的一种结果,其实你可以把 sum = (1 + n) * n / 2 多复制几次再来看:

a = 100 # 1 次sum = (1 + n) * n / 2 # 1 次sum = (1 + n) * n / 2 # 1 次sum = (1 + n) * n / 2 # 1 次sum = (1 + n) * n / 2 # 1 次sum = (1 + n) * n / 2 # 1 次sum = (1 + n) * n / 2 # 1 次print(sum) # 1 次

上述算法的 f(n) = 8,事实上你可以发现无论 n 为多少,上述两段代码就是 运行 3 次和运行 8 次的区别。这种与数据的规模大小 n 无关,执行时间恒定的算法我们就叫它具有 O(1) 的时间复杂度。不管这个常数是多少,我们都记作是 O(1),而不是 O(3) 或者是 O(8)。

2.对数函数

cnt = 1while cnt < n: cnt *= 2 # O(1)

上面的算法程序的时间复杂度就是 O(logn),这个是怎么算出来的呢?其实很简单:上述的代码可以解释成 cnt 乘以多少个 2 以后才能大于等于 n,我们假设个数是 x,也就是求 2^x = n,即 x = log2n,所以这个循环的时间复杂度就是 O(logn)。

最后呢,我们来看看下面的这个例子,借助这段代码来详细的说一下我们如何对其时间复杂度进行详细的分析:

a = 1b = 2c = 3for i inrange(n):for j inrange(n): x = i * i y = j * j z = i * jfor k inrange(n): u = a * k + b v = c * cd = 4

上面的代码没有任何意义,甚至不是一个可运行的代码,我只是用来说明你在以后如何对代码进行执行分析,关于代码本身可不可以运行,就不需要你在这关心了。

上面的代码其实我们要分的话可以分成 4 部分:第 1 部分是 a,b,c 这 3 个赋值语句,执行次数也就是 3 次;第二部分是 3n^2,因为是循环结构,里面有 x,y,z 这 3 个赋值语句,每个语句执行了 n^2 次;第 3 部分是 2n,因为里面是 2 个赋值语句,每条语句被执行了 n 次;最后第 4 部分是常数 1,只有 d 这么 1 条赋值语句。所以我们得到的 T(n
) = 3+3n^2 +2n+1 = 3n^2+2n+4,看到指数项,我们自然的发现是 n^2 做主导,当 n 增大时,后面两项可以忽略掉,所以这个代码片段的数量级就是 O(n^2)。

空间复杂度

类比于时间复杂度的讨论,一个算法的空间复杂度是指该算法所耗费的存储空间,计算公式计作:S(n) = O(f(n))。其中 n 也为数据的规模,f(n) 在这里指的是 n 所占存储空间的函数。

一般情况下,我们的程序在机器上运行时,刨去需要存储程序本身的输入数据等之外,还需要存储对数据操作的「存储单元」。如果输入数据所占空间和算法无关,只取决于问题本身,那么只需要分析算法在实现过程中所占的「辅助单元」即可。如果所需的辅助单元是个常数,那么空间复杂度就是 O(1)。

空间复杂度其实在这里更多的是说一下这个概念,因为当今硬件的存储量级比较大,一般不会为了稍微减少一点儿空间复杂度而大动干戈,更多的是去想怎么优化算法的时间复杂度。所以我们在日常写代码的时候就衍生出了用「空间换时间」的做法,并且成为常态。比如我们在求解斐波那契数列数列的时候我们可以直接用公式去递归求,用哪个求哪个,同样也可以先把很多结果都算出来保存起来,然后用到哪个直接调用,这就是典型的用空间换时间的做法,但是你说这两种具体哪个好,伟大的马克思告诉我们「具体问题具体分析」。

写在之后

如果上面的文章你仔细看了的话,你会发现我不是直接上来就告诉你怎么去求时间复杂度,而是从问题的产生,到思考解决的办法,到“马后炮”,再到 T(n),最后到 O(n)一步一步来的。这样做的原因呢有两个:一是为了让你了解大 O 到底是怎么来的,有时候搞明白了由来,对于你接下来的学习和理解有很大的帮助;二是为了让这个文章看起来不是那么枯燥,我觉得很多时候上来扔给你一堆概念术语,很容易就让人在刚看到它的时候就打起了退堂鼓,循序渐进的来,慢慢引导着更容易接受一些。

很多人从大学到工作,代码写了不少依然不会估算时间复杂度,我感觉倒不是学不会,而是内心没有重视起来。你可能觉得计算机的更新换代很快,CPU 处理速度的能力越来越棒,没必要在一些小的方面斤斤计较,其实我觉得你是 too young too naive。我们随便来算一个简单的例子:有两台电脑,你的电脑的运算速度是我的电脑的 100 倍,同样一道问题,明明稍微想一想用 O(n) 可以做出来,你偏偏要懒,直接暴力 O(n^2),那么当 n 的数据稍微增大一些,比如上万上十万,到底谁的运算速度快还用我再告诉你吗?

所以今后在写算法的时候,请好好学会用时间复杂度估算一下自己的代码,然后想想有没有更有效率的方法去改进它,你只要这样做了,相信慢慢的你的代码会写的越来越好,头会越来越秃。(逃

最后说一点的是,估算算法的复杂度这件事你不要指望一下子看了一篇文章就想弄懂,这个还是要有意识的多练,比如看到一个程序的时候有意识的估算一下它的复杂度,准备动手写代码的时候也想想有没有更好的优化方法,有意识的练习慢慢就会来了感觉。这篇文章我就用了几个小例子,大概的估算方式就是这样。之后我还会继续写一些关于「数据结构与算法」相关的文章和一些具体的实战题目,都会带大家继续分析它们的时间复杂度,敬请期待。

计算机编程的语言里并不包含这个,你说的那个叫二进制。话说你连这种基本中的基本知识都不知道,还问个鸡排呢。


请问谁能告诉我如何巧算24点,如果知道请告诉我,谢谢!
“算24点”作为一种扑克牌智力游戏,还应注意计算中的技巧问题。计算时,我们不可能把牌面上的4个数的不同组合形式——去试,更不能瞎碰乱凑。这里向大家介绍几种常用的、便于学习掌握的方法:1.利用3×8=24、4×6=24求解。把牌面上的四个数想办法凑成3和8、4和6,再相乘求解。如3、3、6...

谁告诉我怎样计算一个图形能否密铺?
计算公式:1\/N1+1\/N2+1\/N3.=1\/2 N是正多边形边数,只限正n边形。密铺就是将多个这样的图形不论怎么摆放,可以完全盖住,就像正方形等,一般正多边形都可以密铺的。如果是只有一种多边形密铺,首先算出这个多边形的内角和,然后算出这个多边形的一个内角是多少,最后,就用360°除以这个多边形的一个...

谁能告诉我三年级几分之几是怎样计算的?
一个数除以另一个数”。“是”一般被看作“除以”。a除以b等于b分之a,b不为0。几分之几的算法是将分数化为小数。分数化小数是一种恒等变形,将分数通过一定的法则化为小数的运算。因为每一个假分数,都可以化为整数或一个整数与一个真分数的和,而每个真分数又可以通过约分化为最简分数。

谁能告诉我,一个数的几次方怎么计算?如:2的6次方、3的4次方得多少?怎 ...
如:2的6次方=2^6=2×2×2×2×2×2=4×2×2×2×2=8×2×2×2=16×2×2=32×2=64 3的4次方=3^4=3×3×3×3=9×3×3=27×3=81 如上面的式子所示,2的6次方,就是6个2相乘,3的4次方,就是4个3相乘。如果是比较大的数相乘,还可以结算计算器、计算机等计算工具来进行...

谁能告诉我几分之几怎么算比如加减乘除快教我
1、分数的加法运算 ①、同分母分数相加,分母不变,即分数单位不变,分子相加,能约分的要约分。②.异分母分数相加,先通分,即运用分数的基本性质将异分母分数转化为同分母分数,改变其分数单位而大小不变,再按同分母分数相加去计算,最后能约分的要约分。2、分数的减法运算 ①同分母分数相减:分子...

谁能告诉我计算任意一年月日是星期几的方法啊?
用当天是几月几日星期几做底,然后算出今年离那年有几年零几天。再用年数减去闰年数,乘365除再加上366乘闰年数再加上零的天数,最后除7,如是整数,就是当天是星期几就是那天是星期几;如不是整数,就要分两种情况:如果往后数(如2007年一月一日至2008年一月一日),余数是几,就用今天往后数...

...计算?请帮忙把能使用计算的题目的具体过程告诉我,谢谢!
1、2.5×3.2×1.25 =2.5×4×(0.8×1.25)=10×1 =10 2、2842÷14+74×3 =203+222 =425 3、7分之4+5分之1-7分之3+5分之4 =(4\/7-3\/7)+(1\/5+4\/5)=1\/7+1 =1又1\/7 4、5.2—11÷7-7分之1×3 =5.2-(11\/7+3\/7)=5.2-2 =3.2 5、4÷1又3分之2+...

怎么用excel计算出一个日期到2012年12月31日有多少年又几月又几天 告 ...
=DATEDIF(A1,B1,"y")&"年"&DATEDIF(A1,B1,"m")-DATEDIF(A1,B1,"y")*12&"个月"&DAY(B1)-DAY(A1)&"天"A1是你的开始日期,B1是你的结束日期

我想问一下学前班的加减法怎么算,比如20-15=几
20-15=5。加法是基本的四则运算之一,它是指将两个或者两个以上的数、量合起来,变成一个数、量的计算。表达加法的符号为加号“+”。进行加法时以加号将各项连接起来。加法是完全一致的事物也就是同类事物的重复或累计,是数字运算的开始,不同类比如一个苹果+一个橘子其结果只能等于二个水果就存在...

谁能告诉我如何用计算机编程的语言比如1和0表示出1到10的数字?_百度知 ...
比如我们在求解斐波那契数列数列的时候我们可以直接用公式去递归求,用哪个求哪个,同样也可以先把很多结果都算出来保存起来,然后用到哪个直接调用,这就是典型的用空间换时间的做法,但是你说这两种具体哪个好,伟大的马克思告诉我们「具体问题具体分析」。写在之后如果上面的文章你仔细看了的话,你会发现我不是直接上来就...

恩平市17371047738: 亲手教我编程 告诉我怎样编程 编程都用什么语言 -
郑剂重酒: 计算机只能读懂二进制的代码,也就是由0和1组成的代码.而为了照顾开发人员,所以出了高级程序语言,也就是我们现在大多数人用的编程语言.开发人员用高级程序语言写完程序以后,要经过编译的过程,把高级程序语言写的程序转换成二进制的代码,然后计算机就可以运行你写的程序了.常用的编成语言有:C,C++,JAVA,PHP,ASP等.一般不同的开发语言有不同的集成开发环境(也就是你所说的软件)

恩平市17371047738: 怎么用电脑编写程序 -
郑剂重酒: 既容易,又难,从两个方面着手:1、选好编程语言,如VC、VF、VB,java等等,最好到大型书店去看一看,一定要下足功夫.选定在网上查阅相关知识,看一看能懂多少(不要求全懂,能够理解20%就行).2、学会建模:就是提出一个问题...

恩平市17371047738: 到底怎么使用编程啊? -
郑剂重酒: 你说的问题比较含糊,怎么使用编程?编程是只用计算机语言编写程序,我这样告诉你吧,首先,你要编程,要选择一门编程语言.我推荐你选择c语言,因为他是历经历史考验的一门功能强大的语言,而且语法相对简单,不过如果你从来都没...

恩平市17371047738: 谁能告诉我怎样编程?
郑剂重酒: 有个高手说" 先学VB,因为VB是可视化的编程工具,容易理解,对于出学者入门是一个不错的选择.之后你可以在学C语言,因为现在的很多的流行编程语言都是从C演变来的,学C语言最最重要的是要把数组和指针学好,否则等于没学.如果你...

恩平市17371047738: 怎么用汇编语言编程 -
郑剂重酒: 汇编语言属于低级语言,它和计算机的硬件组织有关,首先,掌握CPU、存储器、外设的工作原理;其次,掌握汇编语言的指令和伪指令的格式、功能、使用方法;最后,掌握程序设计结构、设计方法.

恩平市17371047738: 哪位朋友能告诉我编写软件的语言哪些比较流行,? -
郑剂重酒: 今天用世界上用DELPHI开发的软件超过了用C++开发的软件,DELPHI,C++,JAVA这三种语言,是当今最流行的,windows是用C与C++还有汇编语言编的主要是C,一般的游戏是用C++,其次DELPHI,JAVA不很好学,只要会一种计算机语言,再参考一些游戏编程方面的资料,就OK了.

恩平市17371047738: 谁能告诉我如何编程?
郑剂重酒: 简单的说,编程就是为了借助于计算机来达到某一目的或解决某个问题,而使用某种程序设计语言编写程序代码,并最终得到结果的过程. 计算机虽然功能十分强大.可以供你上网、打游戏、管理公司人事关系等等,但是没有程序,它就等于是...

恩平市17371047738: 谁能告诉我编程学哪种语言比较好呢?
郑剂重酒: 一般都是用计算机C语言! 如果答案能帮助到你的话请点击下方的“有用”喔! 感谢大哥大姐们的支持,谢谢!

恩平市17371047738: 谁能告诉我学习计算机语言编程最好的方法是什么?? -
郑剂重酒: C++语言,适合在校大学生、自学的转行者、喜欢计算机的人群,学习目标是C++基本语法、数据结构、STL、线程、协议编程、数据库、Socket.学后可以使用C++实现最新的项目案例,雷霆战机、远程控制、视频会议、服务器架构等. C++语言:是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计.特点:C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力.基本内容:类、封装、重载、继承、模版.

恩平市17371047738: 怎样学用计算机语言? -
郑剂重酒: 其实大多数计算机语言都很类似 也都是建立在逻辑和一些基本的数学运算基础上的. 计算机语言就是用来编写程序. 对于一个程序来说,需要的就是那么些东西. 常量,变量,函数(方法),程序结构控制 但是往往高级的东西有所不同,比如C++...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网