/* 建立一种数据结构,可以存储任意个、任意长度的整数,
* 利用这个数据结构,输入一串数,排序,求累加和
* 思路:用以链表表示,用字符型数组表示大整数 链头存储和 */
#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;
}
分享到:
相关推荐
实现 字符串,整型数据,字符型数组互相转换源码
最新单片机仿真 用字符型数组控制P0口8位LED流水点亮最新单片机仿真 用字符型数组控制P0口8位LED流水点亮最新单片机仿真 用字符型数组控制P0口8位LED流水点亮最新单片机仿真 用字符型数组控制P0口8位LED流水点亮最新...
基于VC++的51单片机控制源码:用字符型数组控制LED灯
本文实例讲述了Java编程实现中英混合字符串数组按首字母排序的方法。分享给大家供大家参考,具体如下: 在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序。例如: String[]...
C# 字符串数组 随机排序 方法 通过生成随机数,来对换改变任意数组变量值,此方法相对其它类型数组也通用
c语言 利用字符数组实现两个大整数的加减法.exe
291-用字符型数组控制P0口8位LED流水点亮(51单片机C语言实例Proteus仿真和代码)291-用字符型数组控制P0口8位LED流水点亮(51单片机C语言实例Proteus仿真和代码)291-用字符型数组控制P0口8位LED流水点亮(51单片机C语言...
基于Keil+51单片机的字符型数组控制P0口8位LED流水点亮.rar(源码)基于Keil+51单片机的字符型数组控制P0口8位LED流水点亮.rar(源码)基于Keil+51单片机的字符型数组控制P0口8位LED流水点亮.rar(源码)基于Keil+51...
利用C++编写的 读入字符型数组 最后转成TXT格式的文件 主要功能就是文件读入
为普通数组和对象数组排序,对象数组排序时,可指定排序所依据的对象属性,汉字将以汉语拼音为序。
字符串数组 matlab 字符串数组 matlab字符串数组 matlab字符串数组 matlab字符串数组 matlab字符串数组 matlab字符串数组 matlab字符串数组 matlab字符串数组 matlab字符串数组 matlab字符串数组 matlab字符串数组 ...
iOS开发·必会的算法操作:字符串数组排序 模型对象数组排序
字符型数组的声明和赋值 字符型数组的输出 将字符串赋值给字符数组的两种方式 函数:strlen(函数参数) cin.getline(字符数组名s,字符个数N) 字符串类的对象的输入输出 使用getline输入 字符串的长度#include 及举例...
资源描述: 字符串数组 matlab 说明: 您可以使用字符串数组表示中的文本。字符串数组的每个元素存储一个字符序列。序列可以具有不同长度,...如果字符串数组表示数字,则可以使用 double 函数将其转换为数值数组。
将字符型数组内容转换成字符串,也就是将数组中的几个字符成员变成一个字符串
大容量字符型数组的快速检索.大容量字符型数组的快速检索.
合并一维字符串数组并去重,提供了一个简单的小实例,可以试试看更复杂的情况是否可以处理得好。
matlab数组字符串 MATLAB字符串数组.pdf MATLAB字符串数组.pdf MATLAB字符串数组.pdf MATLAB字符串数组.pdf MATLAB字符串数组.pdf MATLAB字符串数组.pdf MATLAB字符串数组.pdf MATLAB字符串数组.pdf MATLAB字符串...
主要介绍了Java实现字符数组全排列的方法,涉及Java针对字符数组的遍历及排序算法的实现技巧,需要的朋友可以参考下