/* 建立一种数据结构,可以存储任意个、任意长度的整数,
* 利用这个数据结构,输入一串数,排序,求累加和
* 思路:用以链表表示,用字符型数组表示大整数 链头存储和 */
#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;
}
分享到:
相关推荐
【Java数组初识与排序】 在Java编程语言中,数组是一种非常重要的数据结构,它允许我们在同一时间存储多个相同类型的数据。本章将详细介绍数组的概念、应用、排序算法以及多维数组。 ### 1. 数组概念 1.1 为什么...
3. 将字符串复制到新数组中,并截断多余的部分。 4. 输出处理后的字符串。 ### 19. 矩阵最小值查找 **知识点**: - 二维数组:行和列的概念 - 数据类型:整型 `int` - 条件判断:`if` 语句 **实现思路**: 1. ...
计数排序是一种非比较型排序算法,其基本...总结来说,计数排序是一种高效但受限的排序算法,尤其适合元素范围较小的整数排序。在C语言中,可以通过数组来直观地实现该算法,但需谨慎处理内存管理和适用场景的选择。
1. 分数序列求和:该题目运用了for循环来迭代序列的每一项,通过浮点型变量i和j表示分数的分子和分母,用t累加每项的和。这里的知识点有浮点型变量的使用、循环控制结构以及浮点数的相加。 2. 字符串逆序输出:这里...
- 字符串表示的数字可以通过逐字符转换成整数,然后进行加法运算。例如,`ctod(a)`将字符串转换为整数,`ctod(a)+ctod(b)`则表示两个字符串数字的和。 9. 循环和浮点数处理: - `fun(float h)`函数涉及到浮点数的...
定义一个字符型数组c,长度为200: ``` char c[200]; ``` 定义一个浮点型数组f,长度为5: ``` float f[5]; ``` 数组元素的引用 ---------------- 数组元素的引用格式为: ``` 数组名[下标]; ``` 其中,下标是整型...
这里使用了字符型变量`ch`存储第一个字符,然后依次将每个字符与下一个字符相加,最后将字符串反转。 10. 左移4位与字符保留:对于ASCII值小于32或大于100的字符,不做处理,保持原样。 这些代码片段展示了在实际...
- 排序算法:链表的排序(如冒泡排序、选择排序)、数组的排序(如快速排序、归并排序)。 - 回文判断:检查字符串是否正反读都一样,可以用双指针或栈实现。 8. **函数指针**: - 函数指针可以作为参数,实现...
4. 复数类设计:这是面向对象编程的一部分,需要创建一个`Complex`类,包含两个私有浮点型变量表示实部和虚部,以及对应的公有方法:`Plus`(加法)、`Subtract`(减法)和重写的`ToString`方法。`ToString`方法用于...
14. **字符型数组中的\0**:在C语言中,字符串是以`\0`作为结束标志的。 15. **字符串函数**:如`strcpy`用于复制字符串,`strcmp`比较两个字符串,`strcat`连接两个字符串。 16. **有参宏的展开运算**:宏定义如`...
- C语言支持多种基本数据类型,如整型(int)、字符型(char)、浮点型(float/double)等。 - 变量定义的一般形式为:`类型标识符 变量名;`,例如:`int a;` #### 3.2 控制结构 - **条件语句**:if-else结构用于...
7. **字符串处理**:LeetCode中有很多涉及字符串操作的题目,如检查回文、最长公共前缀、替换空格等,这可以让你熟悉字符串操作的技巧和库函数的使用。 通过参与LeetCode的练习,不仅可以提升编程技巧,还能加深对...
- 练习题中给出了几个算法的N-S流程图设计,比如求和序列、素数检测、闰年判断、物理问题模拟(落球反弹)以及排序算法(冒泡排序和简单选择排序)的流程设计。 3. **数据类型、运算符与表达式**: - 常量有整型...
- 插入排序算法,当输入一个新整数时,保持数列从大到小的顺序。 5. **字符串操作**: - 使用`gets`函数读取含有空格的字符串,`scanf`接收删除位置,然后通过移动字符来删除指定位置的字符。 6. **函数的定义...
5. **变量与数据类型**:C语言中的基本数据类型包括整型(如`int`)、字符型(`char`)和浮点型(`float`、`double`)。在实验题目三中,对字符变量进行加法操作需要注意字符编码的性质。 6. **流程控制**:实验...
- 分数序列求和:检查变量类型、循环条件和计算逻辑,例如将整型除法改为浮点型除法以获取准确结果。 - 变量交换:不允许增加语句,通常采用临时变量实现,注意防止数据丢失。 3. **编程题**: - 找出二维数组中...
基数排序是一种非比较型整数排序算法,其原理是按照低位先排序,然后收集;再按高位排序,然后再收集的方式进行排序。 #### 1.12 选取第k小元素 (Select Kth Smallest Element) 这是一种在未排序的数组中找出第k个...
学习C语言时,应掌握各种基础算法,如条件判断(三数比较、成绩分类、闰年)、循环计算(最大公约数、最小公倍数、求和、阶乘)、搜索(查找)和排序(冒泡排序、简单排序、逆序)等。 ### 8. 数组 数组是存储同...
这些题目涵盖了C++编程的基础和应用,包括字符串操作、逻辑判断、循环控制、数学运算、条件语句、数组处理、函数使用以及简单的算法设计。以下是这些习题涉及的知识点的详细说明: 1. **字符串加密解密**:利用异或...
12. **排序与查找**:C语言提供了实现排序算法(如冒泡排序、快速排序)和查找算法(如二分查找)的基础,例如对整数数组进行升序排列。 13. **矩阵操作**:矩阵可以表示为二维数组,对其进行操作如转置、求和等。 ...