OOP实现大整数的加减 这里介绍的只是大整数的加减法,加减法相对来说比较容易理解;如果一个数的前面有很多0或者有空格的话,要删除。加法:要考虑到进位的情况,循环的时候 ,要从最低位开始,还得考虑两个数的数位长短问题;减法:要考虑到借位的情况,还得判断两个数的大小问题,后面的就和加法差不多了。#include "stdafx.h"#include<iostream> //c++的i/o输入和输出us...
sizeof()和strlen的区别 首先得区别清楚:sizeof()是运算符,在头文件的类型为unsigned int,其运算值在编译时就计算好了,参数可以是指针、数组、类型、对象和函数等;strlen()是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化为指针了。该函数完成的功能是从代表该字符串的第一个地址开始遍历的,直到遇到结束符NULL。返回的长度大小不包括NULL。...
求1-1000之间的完数有哪些???? *思路:首先,应该知道什么是完数?? 完数:即完全数,又称完美数或完备数,是一些特殊的自然数。它所有的真因子之和刚好等于它本身。所以,如果一个数恰好等于它所有的真因子之和,则称该数为“完全数”。接下来,就按照这个想法,建立一个容器,循环遍历1-1000之间的每一个数,找出一个数的真因子,存入容器,同时判断因子之和是否等于这个数;若等于,则从容器中打印出此数和它的因子;若不等于,则把容...
浅谈TCP/IP协议栈 TCP/IP协议栈是一系列协议的总和,是构成网络通信的核心骨架,它定义了电子设设备如何连入因特网,以及数据如何在它们之间进行传输。TCP/IP协议采用4层结构,分别是应用层、传输层、网络层和网络接口层,每一层都呼叫它的下一层所提供的洗衣来完成自己的需求,下层的事情不用我们操心; 当通过http发起一个请求时,应用层、传输层、网络层和网络接口层的相关协议依次对该请求进行包装并携带对应的首部,最终...
Linux中fork函数 1、fork简介 一个进程,包括代码、数据和分段配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量的不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新进程中,只有少数值与原来的进程的...
BF算法与KMP算法 BF算法: 即暴风(Brute Force)算法,是普通的模式匹配算法,它的思想就是将子串的第一个字符与母串的第一个字符进行匹配,若相等,则继续比较子串的第二个字符和母串的第二个字符;若不相等,则比较母串的第二个字符和子串的第一个字符,依次比较下去,知道得出最后的匹配结果。算是一种蛮力算法。 代码:int BF(Str *s,Str *sub,int pos){ assert...
数字三角形(C语言) 一、问题描述 给定一个由行数字组成的数字三角形。试着设计一个算法,计算出从三角形的顶到底的一条路径,使得该路径经过的数字总和最大,并分析算法的计算复杂性。如下图所示: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5二、问题分析及算法描述(包含主要...
C语言——八大排序 一、冒泡排序 /时间复杂度:O(n^2) //空间复杂度:O(1) //稳定性:稳定 主要思路如下: 1: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2:对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 3:针对所有的元素重复以上的步骤,除了最后一个。 4: 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字...
循环单链表 与单链表的区别是:最后一个结点的 next 域指向头结点处;#pragma oncetypedef struct CNode{ int data; struct CNode*next;}CNode,*CList;void InitCList(CList plist);bool Insert_head(CList plist,int val);bool Ins...
单链表 单链表:单链表是一种连式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象)+指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每一个结点的地址数据。typedef struct Node{int data;struct Node *next;}Node,*List;void In...
动态顺序表 动态是在用的时候在开辟, 一个节省了时间而有可能会造成内存浪费或者内存不足,动态与齐相反,是有可能花费时间来减少空间的浪费,也不存在内存分配不足问题。头文件:#pragma once#define INIT_SIZE 10typedef struct DSqList这里写代码片{ int *elem;//存储数据的内存 int usedsize;//有效单元数 ...
静态顺序表 顺序表:在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。#pragma once //防止头文件多次被引用#denfine SIZE 10typedef struct SeqList{int elem[SIZE];int usedsize...
动态开辟二维数组 malloc的用法:1、malloc()到底从哪里得到了内存空间?是从堆里面获得空间。也就是说函数返回的指针是指向堆里面的一块内存。操作系统中有一个记录空闲内存地址的链表。当操作系统收到程序的申请时,就会遍历该链表,然后就寻找第一个空间大于所申请空间的堆结点,然后就将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。就是这样!2、什么是堆:堆是大家共有的空间,分全局堆和局部堆。全局堆就是所有...
内存泄漏 日常项目中碰到的内存泄露无非有以下几种: (1) 堆内存泄漏(Heap leak)。堆内存指的是程序运行中根据需要分配通过malloc,realloc new等从堆中分配的一块内存,再是完成后必须通过调用对应的 free或者delete 删掉。如果程序的设计的错误导致这部分内存没有被释放,那么此后这块内存将不会被使用,就会产生Heap Leak. 这是最常见的内存泄露。
指针与引用的区别 1. 引用访问一个变量是直接访问,而指针是间接访问。 2.引用在开始的时候就绑定到了一个内存空间(开始必须赋初值),所以他只能是这个内存空间的名字,而不能改成其他的,当然可以改变这个内存空间的值. 例如 int i = 3,j = 4; int &x = i;//成为i的别名 x = j;//不能否认x仍然引用i,并没有成为j的别名,只是修改了x和j...
数组与指针的区别与联系 数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。 这些无序排列的同类数据元素的集合称为数组。 指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为"指针"。意思是通过它能找到以它为地址的
作业10-16 1.求1到20的阶乘之和;#include int main() { int i,s=0,p=1; for(i=1;i {p*=i; s+=p; } printf("sum=%d",s); return 0; }结果为:sum=2680407292
c语言中的#undef #undef 是在后面取消以前定义的宏定义 该指令的形式为 #undef 标识符 其中,标识符是一个宏名称。如果标识符当前没有被定义成一个宏名称,那么就会忽略该指令。 一旦定义预处理器标识符,它将保持已定义状态且在作用域内,直到程序结束或者使用#undef 指令取消定义。 例:#include #include #define Ma
声明与定义 1.什么是定义:所谓定义就是(编译器)创建一个对象,为这个对象分配一块内存并给它取上一个名字,这个名字就是我们常说的变量名或对象名,但注意,这个名字一旦和这块内存匹配起来,他们就同生共死,终生不离不弃,并且这块内存的位置也不能被改变。一个变量或对象在一定区域内(比如函数内,全局)只能被定义一次,如果定义多次,编译器会提示你重复定义同一个变量或对象。2.什么是声明:有两重含义,如下:第一重含
作业10-14 一、输入一个字符,判断它是否为大写字母,如果是,将它转化为小写字母,如果不是,不转化。然后输出最后得到的字符。 #include int main(){char ch;scanf("%c",&ch);ch=(ch>='A'&&chprintf("%c",ch);return 0;}二、九九乘法表#include int main(