字符型数组表示大整数 并排序、求和(华科保研机试)
2012-09-06 15:43
99 查看
/* 建立一种数据结构,可以存储任意个、任意长度的整数, * 利用这个数据结构,输入一串数,排序,求累加和 * 思路:用以链表表示,用字符型数组表示大整数 链头存储和 */ #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct _Node{ char *data; int length; struct _Node *next; }Node; char *GetSum(char *,char *); int CompareData(char *a,char *b); Node* InitList(void) { Node *L = (Node *)malloc(sizeof(Node)); L->data = "0"; L->length = 0; L->next = NULL; return L; } /* 把一个字符数组插入到链表中,而且从小到大排序 */ int Insert(Node *L, char *a) { int pos = 0; Node *p = L; if(!L)return 1; Node *newNode = (Node *)malloc(sizeof(Node)); newNode->length = strlen(a); newNode->data = a; newNode->next = NULL; while(p->next && CompareData(a,p->next->data)>=0) p = p->next; newNode->next = p->next; p->next = newNode; L->data = GetSum(L->data,a);//头结点存储和 L->length++;//设头结点,length存储数字个数 } void Tranverse(Node *L) { Node *p = L->next; if(!L)return; printf("Sum : %s\nNumber of data : %d\n\n",L->data,L->length); while(p) { printf("%s\t%d\n",p->data,p->length); p = p->next; } printf("\n"); } /* 比较两个数的大小,返回值: * 1:a>b 0:a=b -1:a<b */ int CompareData(char *a,char *b) { if(strlen(a) > strlen(b))return 1; if(strlen(a) < strlen(b))return -1; return strcmp(a,b); } char* GetSum(char *a,char *b) { int m,carry=0,s=0; int pos_a = strlen(a)-1,pos_b=strlen(b)-1; int pos_c = pos_a>pos_b?pos_a:pos_b; int i=pos_a,j=pos_b,k=pos_c; char *c = (char *)malloc(sizeof(char)*(pos_c)+1); for(;i>=0 && j>=0;i--,j--,k--) { m = a[i] + b[j] - 2*'0' + carry; carry = m/10; c[k] = m>9 ? m-10+'0' : m+'0'; } for(;i>=0;i--,k--) { m = a[i] - '0' + carry; carry = m/10; c[k] = m>9 ? m-10+'0' : m+'0'; } for(;j>=0;j--,k--) { m = b[j] - '0' + carry; carry = m/10; c[k] = m>9 ? m-10+'0' : m+'0'; } char *sum = (char *)malloc(sizeof(char)*(carry?pos_c+3:pos_c+2)); if(carry){ sum[0]='1'; s++; } for(m=0;m<=pos_c;)sum[s++]=c[m++]; sum[s]='\0'; return sum; } int main(int argc, char *argv[]) { int i ; Node *L = InitList(); for(i=1;i<argc;i++) Insert(L,argv[i]); Tranverse(L); getchar(); return 1; }
相关文章推荐
- 华为机试—整数数组排序(字符串输入输出)
- 北航计算机机试10判断整数数组相同06排序与数组内容结合
- 华为机试—整数数组排序(字符串输入输出)
- LintCode算法题解——奇偶分割数组、二进制中1个数、反转整数、加一、排序数组转换为高度最小的二叉搜索树、二进制求和
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,
- 给一个整数数组,对数组中的每个整数中的所有数字按照升序排列(如101排序后为011)请写一个方法,输出排序后的数组中的最大数。 例如有一个数组: 101、132、375,排序后11、123、357,
- 整数数组中最大子数组求和03
- 将数组排序组成最小的整数
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 对数组中N个整数由小到大排序的几种方法
- js实现随机选取[10,100)中的10个整数,存入一个数组,并排序。 另考虑(10,100]和[10,100]两种情况。
- java 基础知识-数组的7种算法(排序、求和、最值、遍历...)
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- java 基础知识-数组的7种算法(排序、求和、最值、遍历...)
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序。 要求时
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
- 一个数组中有65535个数不重复的大于0的整数(即:0~~65535内所有不重复的整数,数序是杂乱无章的), 用最快的方式排序
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- Java声明一个10个元素的整数数组,随机赋值,打印输出,排序后,打印输出