博文

两个大数相加

大数相加是大数相乘和大数指数的基础 ,因此,花了一晚上的时间写了该函数,也许代码比较臃肿,欢迎指正! 源代码如下:(注意有个offset是错位,我将offset设为0.) #include <iostream.h> #include <string.h> void main() {        // 需要倒着相加才行呀;        cout<<" 请输入两个任意大的数 "<<endl;        char a[255]="0";        cin>>a;        char ab[255];        memset(ab,'\0',sizeof(char)*255);        for(unsigned int i_=0;i_<strlen(a);i_++)               ab[i_]=a[strlen(a)-i_-1];        char c[255]="0";        cin>>c;        char cd[255];        memset(cd,'\0',sizeof(char)*255);      ...

Sizeof与Strlen的区别与联系

Sizeof与Strlen的区别与联系(转) 1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。 该类型保证能容纳实现所建立的最大对象的字节大小。 2.sizeof是算符,strlen是函数。 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。 sizeof还可以用函数做参数,比如: short f(); printf("%d\n", sizeof(f())); 输出的结果是sizeof(short),即2。 4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。 5.大部分编译程序 在编译的时候就把sizeof计算过了 是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因 char str[20]="0123456789"; int a=strlen(str); //a=10; int b=sizeof(str); //而b=20; 6.strlen的结果要在运行的时候才能计算出来,时用来计算字符串的长度,不是类型占内存的大小。 7.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。 8.当适用了于一个结构类型时或变量, sizeof 返回实际的大小, 当适用一静态地空间数组, sizeof 归还全部数组的尺寸。 sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸 9.数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址, 如: fun(char [8]) fun(char []) 都等价于 fun(char *) 在C++里参数传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小 如果想在函数内知道数组的大小, 需要这样做: 进入函数后用memcpy拷贝出来,长度由另一个形参传进去 fun(unsiged char *p1, int len) { unsigned char* buf = new unsigned char[len+1] memcpy(buf, p1, len); } 我们能常在用到 sizeof 和 strlen 的时候,通常是计算字符串数组的...

评析dijsktra算法

dijsktra算法的最大优点是:用矩阵来存储走过的顶点,这一点足够自己学习了。 还有就是,它非常彻底的贯彻了用空间换时间的思想,实际上,空间换时间,还可以简化编码的复杂度,提高程序的易读性。 还有一些程序的计算技巧,这一点就先不述了,先搞定大数相乘吧! 源代码如下: #include <cstdio> #include <cstdlib> //using namespace std; #define SIZE 6 #define INFINITY 0X7FFFFFFF int arcs[SIZE][SIZE]={0,INFINITY,10,INFINITY,30,100,\                      INFINITY,0,5,INFINITY,INFINITY,INFINITY,\                      INFINITY,INFINITY,0,50,INFINITY,INFINITY,\                      INFINITY,INFINITY,INFINITY,0,60,10,\                 ...

从vc++6.0移植到DEV-C++

如果是C头文件,把.h去掉,同时在文件名前面加C 如:#include <stdio.h> 改为:#include <cstdio> 在所有的include后面加上: using namespace std; 如果要是加上system("PAUSE");就可以在console运算后,查看结果了,dev-c++不同于vc++,如果不加system("PAUSE"),就会出现console窗口一闪而过。看不到结果。 PS:如果,加system(),需要加上头文件:#include <cstdlib> PS-PS:stdlib头文件包含的常用函数相当丰富啊 如果用memset();需要加上头文件 #include <cstring>

由普林姆算法 看数据结构定义的重要性

花了一上午的时间,和下午1小时的时间写了,普林姆算法,从中体会到了,数据结构定义的重要性 :        上午的时候,老是想用两个一维数组来定义结点是否被访问过,结果,一会儿就弄糊涂了,但由于本人一向比较执着,因此,即使自己十分不在状态,仍然在撞到南墙之前,仍毫不气馁,继续发狂,直到自己的脑袋实在承受不了脑细胞成数量级的死亡。作罢,中午休息后,改变了一下数据结构,仅仅用了一个一维数组来表示是否被走过,很快就解决了。^~^,轻松一下,自己给自己赏一个香吻吧。 代码如下:(PS:baidu的文字编辑器该升级了,害我代码区需要在WORD里面编辑好才能粘过来) // 测试用例是:《数据结构 ( 第二版 ) 》 P174 页 #include <stdio.h> #include <stdlib.h> #include <string.h> #define INIFITY 0X7FFFFFFF #define SIZE 6 int flag_true[6]; typedef struct {        int index;        int adj_index;        int value; }* PrimeT,Node; int zhenlie[SIZE][SIZE] = {0,6,1,5,INIFITY,INIFITY,\                                               ...

建立HUFFMAN树,并进行编码(编码使用无栈非递归方法)

//ps:在进行哈夫曼编码的时候,用了非递归和非栈的情况 //利用了课本上的思想,但是不拘泥于其思想,更容易理解 #include <malloc.h> #include <stdio.h> #define SIZE 5 typedef struct { int Parent;//双亲的索引 int value;//数据域数值 int left,right;//左右孩子的索引 }* Huffman,Node; void Select(Huffman &Huff,int start,int end,int &s1,int &s2) { //s1<s2<... int Miner=0x7FFFFFFF; int Minest=0x7FFFFFFF; int x_Miner=-1; int x_Minest=-1; for(int i=start;i<=end;i++) {    if(Huff[i].value<Minest&&0==Huff[i].Parent)    {     x_Miner=x_Minest;     Miner=Minest;     Minest=Huff[i].value;     x_Minest=i;    }    else    {     if(Huff[i].value<Miner&&0==Huff[i].Parent)     {      Miner=Huff[i].value;      x_Miner=i;     }    } } s1=x_Minest; s2=x_Miner; return ; } //先将Huffman的数组建好 void HuffmanCoding(int ...

建立HUFFMAN树,并进行编码(编码使用逆向编码)

PS:利用了书本上的思想,但不拘泥于书本,特别是在进行编码并显示节点的编码时 #include <malloc.h> #include <stdio.h> #define SIZE 5 typedef struct { int Parent;//双亲的索引 int value;//数据域数值 int left,right;//左右孩子的索引 }* Huffman,Node; void Select(Huffman &Huff,int start,int end,int &s1,int &s2) { //s1<s2<... int Miner=0x7FFFFFFF; int Minest=0x7FFFFFFF; int x_Miner=-1; int x_Minest=-1; for(int i=start;i<=end;i++) {    if(Huff[i].value<Minest&&0==Huff[i].Parent)    {     x_Miner=x_Minest;     Miner=Minest;     Minest=Huff[i].value;     x_Minest=i;    }    else    {     if(Huff[i].value<Miner&&0==Huff[i].Parent)     {      Miner=Huff[i].value;      x_Miner=i;     }    } } s1=x_Minest; s2=x_Miner; return ; } //先将Huffman的数组建好 void HuffmanCoding(int (&HT)[SIZE]) {...