07 2015 档案
摘要:题目:给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。思路:方法1:直接连乘n-1个数,得到B[i];时间复杂度:O(n^2)方法2:构建前向乘积...
阅读全文
摘要:题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。思路:1、排序将数组排序,然后...
阅读全文
摘要:题目:求树中两个结点的最低公共祖先思路:考虑一下几种情况:1、该树为二叉搜索树二叉搜索树是排序树,位于左子树点的结点都比父结点小,而位于右子树的结点都比父结点大,只需要从树的根结点开始和两个输入的结点进行比较。如果当前结点的值比两个结点的值都大,那么最低的公共父结点一定在左子树,下一步就是遍历左子树...
阅读全文
摘要:题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。思路:考虑+、-、空格、非数字字符,以及溢出问题代码:#include using namespace std;enum Status {kValid=0,kInvalid};int g_nStatus=kInvalid;long...
阅读全文
摘要:Problem:There are three poles and N disks where each disk is heaver than the next disk. In the initial conguration, the discs are stacked upon another...
阅读全文
摘要:题目:写一个不能被继承的类思路:1、把构造函数设为私有函数在C++中子类的构造函数会自动调用父类的构造函数,子类的析构函数也会自动调用父类的构造函数,要想一个类不能被继承,只要把它的构造函数和析构函数都定义为私有函数。当一个类试图从它那继承的时候,必然会由于调用构造函数、析构函数而导致编译错误。但如...
阅读全文
摘要:题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:很容易想到通过位运算来解决问题。以5+17=22为例,参考十进制加法:1、只做各位相加不进位运算,即得到12,;2、做进位运算,即得到10,;3、把前面两个结果先相加,即得到22;同样二进制加法也一样:1、两个...
阅读全文
摘要:题目:求1+2+3+...+n,要求不能使用乘除法,for,while,if,else,switch,case等关键字及条件判断语句(a?b:c)。思路:1、构造函数在类中定义静态成员变量N和sum,在构造函数中++N,sum+=N;如此一来,创建n个该类型的实例,就会调用n次构造函数,对应的静态变...
阅读全文
摘要:题目:0,1,...n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字,求出这个圆圈里剩下的最后一个数字。思路:1、环形链表模拟圆圈创建一个n个节点的环形链表,然后每次在这个链表中删除第m个节点;可以用std::list来模拟环形链表,list本身不是环形结构,因此每当迭代器扫...
阅读全文
摘要:题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这五张牌是不是连续的,2~10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。思路:把5张牌看成一个数组,就看排序后的数组是不是连续的,大小王看成特殊的数字,例如定义为0,与其他数字区分开,0的作用就是补充其他数字间不连...
阅读全文
摘要:题目:把n个骰子仍在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。思路:s可能出现的值的范围为:n--6*n1、全排列回溯法枚举n个骰子(6面)的全排列,然后计算每一次排列所有值的和,并统计该和的出现的次数,除以6^n(全排列的全部可能性),即为概率。(这里就不列出...
阅读全文
摘要:题目:字符串的左旋转操作是把字符串前面的若干字符转移到字符串的后面。请定义一个函数实现字符串左旋转操作的功能,比如:输入字符串"abcdefg"和数字2,该函数将返回左旋转2位得到的结果"cdefgab";思路:这道题和翻转单词顺序很相似。思路也是一样的。第一步:翻转整个字符串"abcdefg",得...
阅读全文
摘要:题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串“I am a student.”,则输出"student. a am I".思路:这是一道常见的面试题,思路分两步:1、翻转句子中的所有字符;2、翻转句子中每一个单词;代码:...
阅读全文
摘要:题目:输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1-5,,4-6和7-8.思路:题目求的是连续正数序列,而且至少含有两个数,那么我们可以从1,2这两个数开始,以求和为9的所有连续序列为例...
阅读全文
摘要:题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s,如果有多对数字的和等于s,输出任意一对即可。思路:1、枚举固定一个数字,然后依次判断数组中该数字后面的数字与它的和是不是等于s。时间复杂度:O(n^2)2、前后遍历利用排序数组的规律,定义两个指针,分别指向数组的首尾...
阅读全文
摘要:CString类的定义如下:class CMyString{public: CMyString(const char* pData=NULL); CMyString(const CMyString& str); CMyString& operator=(const CMyStrin...
阅读全文
摘要:题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。思路:这道题的简单版本是除了一个数字之外,其他数字都出现了两次,这个很简单,将所有的数异或一遍就得到了那个数字。如果不考虑空间复杂度的话,通过hash表统计的方法可以得到这两个数字;但如果空间复杂度要求...
阅读全文
摘要:题目:输入一课二叉树的根结点,判断该树是不是平衡二叉树。如果二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。思路:1、重复遍历结点参考上一题求二叉树的深度,先求出根结点的左右子树的深度,然后判断它们的深度相差不超过1,如果否,则不是一棵二叉树;如果是,再用同样的方法分别判断左...
阅读全文
摘要:题目:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。结点的定义如下:struct TreeNode{ int val; TreeNode* left; TreeNode* right;};思路:对于树的问题基...
阅读全文
摘要:题目:统计一个数字在排序数组中出现的次数。思路:1、顺序遍历顺序扫描一遍数组,统计该数字出现的次数。时间复杂度:O(n)2、二分查找假设我们需要找的数字是k,那么就需要找到数组中的第一个k和最后一个k出现的位置。如何通过二分查找得到第一个k的位置呢?取数组中间的数字与k作比较,如果该数字比k大,那么...
阅读全文
摘要:题目:输入两个链表,找出它们的第一个公共结点。链表结点的定义如下:struct ListNode{ int val; ListNode* next; ListNode(int x):val(x),next(NULL){};};思路:1、暴力法遍历第一个链表,每遍历到一个结点,在第二...
阅读全文
摘要:题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。思路:1、顺序扫描顺序扫描整个数组,每扫描到一个数字,就将该数字跟后面的数字比较,如果大于的话,则这两个数字构成了逆序对。(比较简单,这里就不贴出代码)时间复杂度:O(n...
阅读全文
摘要:题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。思路:通过hash表记录第二个字符串中出现的字符,hash表可以由长度为256的bool数组表示。然后遍历...
阅读全文
摘要:题目:在字符串中找出第一个只出现1次的字符,如输入“abaccdeff”,则输出b。思路:1、暴力遍历从头开始扫描字符串中的每个字符,当访问某个字符时,取该字符与后面的每个字符相比较,如果没有重复的字符,那么该字符就是第一个只出现一次的字符。时间复杂度:O(n^2)2、Hash通过hash表来记录字...
阅读全文
摘要:题目:把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路:1、逐个判断逐个判断每个整数是不是丑数。根据丑数的定义,丑数只能被2,3,5整除,也就是说,如果一个数能被2整...
阅读全文
摘要:(转自http://www.cnblogs.com/yxnchinahlj/archive/2011/02/12/1952550.html)之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的...
阅读全文
摘要:主要内容:1、qsort的用法2、sort的用法3、qsort和sort的区别qsort的用法:原型:void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *));功能:使用快速排序例程进行排...
阅读全文
摘要:题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路:1、全排列求出数组中所有数字的全排列,然后把每个全排列拼起来,求出拼出来的数字的最大值。2、定义新的排序规则如果...
阅读全文
摘要:题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,一共出现了5次。思路:1、累加法累加1到n中每个整数1出现的次数。求每个整数1出现的个数:通过对10求余数,判断整数的个位是否为1,如果商不为0,则继续除以10...
阅读全文
摘要:题目:输入一个整型数组,数组里有正数也有负数,数组中一个或连续多个整数组成一个子数组,求所有子数组的和的最大值。要求时间复杂度为O(n)思路:1、数组累加从头到尾逐个累加数组中的每个数字,当累加之和小于0时,从下一个元素开始累加,并通过一个变量保存最大和。2、动态规划思路与1一样,假设f(i)为以第...
阅读全文
摘要:题目:八皇后问题:在8 X 8的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后不得处于同一行,同一列或者同意对角线上,求出所有符合条件的摆法。思路:1、回溯法数据结构:由于8个皇后不能处在同一行,那么肯定每个皇后占据一行,这样可以定义一个数组A[8],数组中第i个数字,即A[i]表示位于第...
阅读全文
摘要:题目:输入一个字符串,输出该字符串的字符的所有组合,比如输入字符串:abc,输出a、b、c、ab、ac、bc、abc。思路:回溯法建立一个数组记录字符串中的字符出现与否,如字符串abc,int A[3],A={1,0,1},就代表字符ac。代码:#include #include using nam...
阅读全文
摘要:题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路:1、排序把输入的n个整数排序,然后取前k个数;时间复杂度:O(nlogn)2、Partition通过partition找到第k大的数,它的左边就是前k小的数;时间复杂...
阅读全文
摘要:TCP/IP协议族分为四层,互联网中不同的主机是通过IP层使用不同的IP地址来寻址的,也就是说,在IP层及其上层使用的是IP地址,它是一个逻辑地址(Logic Address)。但IP层的数据报传输到数据链路层后,通过数据链路层的网络接口卡,才能把IP数据报传输到目的主机或距目的主机较近的路由器...
阅读全文
摘要:主要内容:1、ping的原理以及工作过程2、ICMP协议3、ICMP的应用:ping,traceroute1、ping的原理以及工作过程ping的原理 ping程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。 ping使用的是ICMP协议,它发送i...
阅读全文
摘要:题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。思路:1、方法1:先排序,然后找中位数;时间复杂度O(nlogn)2、方法2:基于Partition函数...
阅读全文
摘要:题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。思路:把一个字符串看成两部分组成:第一部分为第一个字符,第二部分为后面的所有字符。求整个字符串的排列,可以看出两步:首先求所有可...
阅读全文
摘要:题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。二叉树的定义如下:struct TreeNode{ int val; TreeNode* left; TreeNode* right;};思路:在二叉树中,每个结...
阅读全文
摘要:题目:请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复制一个复杂链表。在复杂链表中,每个结点除了有一个pNext指针指向下一个结点之外,还有一个pSibling指向链表中的任意结点或者NULL。结点的定义如下:struct ComplexLi...
阅读全文
摘要:题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二叉树结点的定义:struct TreeNode{ int val; TreeNode* left; TreeNode* right;}...
阅读全文
摘要:题目:输入一个整数数组,判断该数组是不是某个二叉搜索树的后序遍历的结果,如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。思路:根据二叉搜索树的后序遍历特点,很容易可以判断该数组是否为后序遍历的结果。在二叉搜索树的后序遍历序列中,最后一个数字是树的根节点的值,数组中前...
阅读全文
摘要:题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路:很明显,这是一个广度优先遍历。需要一个队列容器来保存结点,具体操作:1、将根结点压入队列中,并打印根结点;如果根结点有子结点,将左右子结点依次压入队列的尾部;2、如果队列不为空,从队列头部取出结点,重复步骤1,直至队列为空。推广:不管...
阅读全文
摘要:题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。思路:直观的想法就是模拟第一个...
阅读全文
摘要:题目:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。在该栈中,调用min,push,pop的时间复杂度都是O(1)思路:1、除了原来的栈s,增加一个辅助栈s_min,用来保存每次进栈时的最小元素。Push操作:栈s:元素value直接进栈s;栈s_min:判断s_min是否为...
阅读全文
摘要:题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路:把矩阵想象成若干个圈,通过循...
阅读全文
摘要:题目:操作给定的二叉树,将其变换为源二叉树的镜像。二叉树的定义如下:struct TreeNode{ int val; TreeNode* left; TreeNode* right;};输入描述:二叉树的镜像定义:源二叉树 8 / \ ...
阅读全文
摘要:题目:输入两棵二叉树A和B,判断B是不是A的子结构。二叉树结构定义如下:struct TreeNode{ int val; TreeNode* left; TreeNode* right;};思路:判断二叉树B是否为二叉树A的子树:首先判断二叉树A的根节点值是否等于二叉树B的根节点...
阅读全文
摘要:题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然时按照递增排序的。链表结点定义如下:struct ListNode{ int val; ListNode* next;};思路:合并两个递增排序的链表,思想类似于归并排序的merge过程。1、当两个链表均不为空,如果链表1...
阅读全文
摘要:题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表的定义如下:struct ListNode{ int val; ListNode* next;};思路:反转链表,需要调整结点的next指针,例如a->b->c,需要调整为anext=a,需要一个变量来保存...
阅读全文
摘要:题目:输入一个链表,输出该链表中倒数第k个结点。例如:链表中有6个结点,从头到尾依次为1,2,3,4,5,6,则该链表的倒数第3个结点为4.链表结点定义:struct ListNode{ int val; ListNode* next;};思路:1、遍历整个链表,计算结点的个数,再遍历链...
阅读全文
摘要:题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。如果去掉约束条件:并保证奇数和奇数,偶数和偶数之间的相对位置不变?思路:如果要保证奇数和奇数,偶数和偶数之间的相对位置不变...
阅读全文
摘要:题目:在给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间内删除该结点。链表结点与函数的定义如下:struct ListNode{int val;ListNode* next;};void deleteNode(ListNode** pListHead,ListNode* pToBeDe...
阅读全文
摘要:题目:给定如下图所示的无向连通图,假定图中所有边的权值都为1;显然,从源点A到终点T的最短路径有多条,求不同的最短路径的数目。注:两条路径中有任意结点不同或者结点顺序不同,都称为不同的路径。思路:给定的图中,边权相等且非负,Dijkstra最短路径算法退化为BFS广度优先搜索。实现过程中可以使用队列...
阅读全文
摘要:题目: 赛诗会后,十二金钗待奔前程。分别宴上,12人各写了一首诗放入包囊。 大家随机取一个,若取到自己的诗,则再取一个,并放回自己的诗,12人都拿到诗算一种分配。 请问:共有多少种不同的分配? 思路: 问题简化:给定n个人写n首诗,要求赠给其他人,共有多少种分配方法。 通俗一点就是:1到n的全排列,
阅读全文
摘要:题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,打印1,2,3一直到最大的3位数即999。思路:1、不考虑n的范围,直接打印。void Print1ToMaxOfNDigits_1(int n){ int number=1; for(int i=0;i#include...
阅读全文
摘要:题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。思路:看题目似乎很简单,循环相乘不就行了吗?不是的。需要考虑几个问题:1、exponent为0或者负数;2、base为0且exponent为负数,其中判断base是否为0,需要考虑ba...
阅读全文
摘要:题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路:很明显,这道题考察的是位运算。1、依次将整数右移,判断整数最后一位是否为1(&1);问题:如果该整数为负数,则会陷入无限循环,为什么?因为负数右移的时候,左边补1,整数右移过程中不可能为0,因此会陷入无限循环。补码的移位:左...
阅读全文
摘要:题目:现在要求输入一个整数n,请你输出斐波那契数列的第n项。斐波那契数列的定义:f(0)=0;f(1)=1;f(n)=f(n-1)+f(n-2)思路:1、递归:根据递推公式来实现优点:代码简单,易懂缺点:效率低:函数递归调用过程中需要不断分配栈空间,且不断地入栈出栈,代码执行效率低;栈溢出:当递归层...
阅读全文
摘要:主要内容:1、一级指针和二级指针2、函数指针传递的例子3、什么时候需要传递二级指针?4、二级指针在链表中的使用1、一级指针和二级指针一级指针:即我们一般说的指针,就是内存地址;二级指针:指向指针的指针,就是地址的地址;如:int a=1;int *p=&a; // p为a变量的地址,通过*p可以得...
阅读全文
摘要:题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。思路:1、遍历数组,找到数组的最小值,时间复杂度O(n);2、二分查找,时间复杂度O...
阅读全文
摘要:题目:用两个栈实现一个队列。队列的声明如下:请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。思路:根据栈的“先进后出”特点,如果将数据导入一个栈,再导入另一个栈,这样数据的出入顺序就变成了“先进先出”,即队列的特点。假设有两个栈,s...
阅读全文
摘要:题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列。二叉树的定义如下:struct Binary...
阅读全文
摘要:题目:输入一个链表的头结点,从尾到头反过来打印每个结点的值。链表结点定义:struct ListNode{ int value; ListNode* pNext;};思路:1、改变链表结构的话,先反转链表,然后从头到尾打印每个结点的值。(后续博文会有相关实现,这里就暂不实现)2、无需改变...
阅读全文
摘要:题目:请实现一个函数,把字符串中的每个空格替换成“%20”,例如输入“We are happy”,则输出“We%20are%20happy”。思路:背景:在网络编程中,如果URL参数中含有特殊字符,如空格,#等,导致服务器端无法获得正确的参数值,我们需要将这些特殊符号转换成服务器可以识别的字符。转换...
阅读全文
摘要:分享一篇趣文(来自伯乐在线:http://blog.jobbole.com/70395/),同样是海盗分赃问题,这篇文章以诙谐幽默的口吻以及浅显易懂的对话来解释海盗分赃问题。与上一篇博文海盗分赃_1不同的是,这里的投票规则为半数即可,并不要求大于半数。因此该问题的思路过程结果为: (3...
阅读全文
摘要:题目:P个海盗偷了D颗钻石后来到公海分赃,一致同意如下分赃策略:首先,P个海盗通过抽签决定1-P的序号。然后由第1号海盗提出一个分配方案(方案应给出每个海盗分得的具体数量),如果能够得到包括1号在内的绝对多数(即大于半数)同意,则按照该分配方案执行,否则1号将被投入大海喂鲨鱼;而后依次类似地由第2号...
阅读全文
摘要:主要内容:1、什么是堆?2、如何建堆3、堆排序4、参考代码一、什么是堆?“堆”是个很有趣的数据结构,是个完全二叉树。“堆”的特性:每个节点的键值一定总是大于(或小于)它的父节点(大于:称为“最大堆”,小于:称为“最小堆”),或者说每个节点总是大于或小于它的子节点。对于最大堆而言,根节点为最大值;对于...
阅读全文
摘要:题目:用十进制计算30!(30的阶乘),将结果转换成3进制进行表示的话,该进制下的结果末尾会有____个0。思路:这道题与上一篇博文N!尾部连续0的个数的思路是一样的。计算N!下三进制结果末尾有多少个0,其实就是计算三进制中的3被连续进位多少次,只要将N!因式分解成3^m*other,m就是答案。技...
阅读全文
摘要:题目:对任意输入的正整数N,编写C程序求N!的尾部连续0的个数,并指出计算复杂度。如:18!=6402373705728000,尾部连续0的个数是3。(不用考虑数值超出计算机整数界限的问题)思路:1、直接计算N!的值,然后统计尾部0的个数,时间复杂度O(n);2、发散思维,想想尾部为0的数是怎么得到...
阅读全文