链表解大数据相加减相乘

/*
题意:大数相加减相乘
单链表的运用
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char c;
int flag;

typedef struct node
{
char data;
struct node *next;
} Node;

Node *a[10];

Node *create_link()
{
Node *head,*p;
head=p=NULL;
char m;
while(1)
{
scanf("%c",&m);
if(m==‘\n‘||m==‘+‘||m==‘-‘||m==‘*‘)
{
if(m==‘+‘)
c=‘+‘;
else if(m==‘-‘)
c=‘-‘;
else if(m==‘*‘)
c=‘*‘;
break;
}
p=(Node *)malloc(sizeof(Node));
p->data=m;
p->next=NULL;
if(head==NULL)
{
head=p;
}
else
{
p->next=head;
head=p;
}
}
return head;
}

Node *flash_back(Node *link)
{
Node *p=NULL,*head=NULL;
while(link)
{
p=(Node *)malloc(sizeof(Node *));
p->data=link->data;
p->next=NULL;
if(head==NULL)
{
head=p;
}
else
{
p->next=head;
head=p;
}
link=link->next;
}
return head;
}

void comp(Node *p1,Node *p2)
{
while(p1&&p2)
{
if(p1->data>p2->data)
flag=1;
else if(p1->data<p2->data)
flag=0;
p1=p1->next;
p2=p2->next;
}
if(p1)
flag=1;
else if(p2)
flag=0;
}

Node *add(Node *p1,Node *p2)
{
char s;
int k=0;
Node *p,*head;
p=head=NULL;
while(p1&&p2)
{
s=p1->data+p2->data-‘0‘+k;
k=0;
if(s>‘9‘)
{
s=s-10;
k=1;
}
p=(Node *)malloc(sizeof(Node));
p->data=s;
p->next=NULL;
if(head==NULL)
{
head=p;
}
else
{
p->next=head;
head=p;
}
p1=p1->next;
p2=p2->next;
}
while(p1)
{
p=(Node *)malloc(sizeof(Node));
s=k+p1->data;
k=0;
if(s>‘9‘)
{
s=s-10;
k=1;
}
p->data=s;
p->next=head;
head=p;
p1=p1->next;
}
while(p2)
{
p=(Node *)malloc(sizeof(Node));
s=k+p2->data;
k=0;
if(s>‘9‘)
{
s=s-10;
k=1;
}
p->data=s;
p->next=head;
head=p;
p2=p2->next;
}
if(k)
{
p=(Node *)malloc(sizeof(Node));
p->data=k+‘0‘;
p->next=head;
head=p;
}
return head;
}

Node *sub(Node *p1,Node *p2)
{
char s;
int k=0;
Node *p,*head;
p=head=NULL;
while(p1&&p2)
{
if(p1->data<p2->data)
{
s=p1->data+10-p2->data+‘0‘-k;
k=1;
}
else
{
s=p1->data-p2->data+‘0‘-k;
k=0;
}
p=(Node *)malloc(sizeof(Node));
p->data=s;
p->next=NULL;
if(head==NULL)
{
head=p;
}
else
{
p->next=head;
head=p;
}
p1=p1->next;
p2=p2->next;
}
while(p1)
{
p=(Node *)malloc(sizeof(Node));
s=p1->data-k;
k=0;
p->data=s;
p->next=head;
head=p;
p1=p1->next;
}
return head;
}

void print_link(Node *p);

Node *mul(Node *p1,Node *p2)
{
int i=0,j=0;
int s,k;
Node *head,*head1,*head2,*tail,*p;
head1=p1;
while(head1)
{
k=0;
head2=p2;
head=tail=NULL;
while(head2)
{
s=(head2->data-‘0‘)*(head1->data-‘0‘)+k;
k=0;
k=s/10;
s=s%10;
p=(Node *)malloc(sizeof(Node *));
p->data=s+‘0‘;
p->next=NULL;
if(head==NULL)
{
head=p;
tail=p;
}
else
{
tail->next=p;
tail=p;
}
head2=head2->next;
}
if(k)
{
p=(Node *)malloc(sizeof(Node *));
p->data=k+‘0‘;
p->next=NULL;
tail->next=p;
tail=p;
}
int i1=i;
while(i1>0)
{
p=(Node *)malloc(sizeof(Node *));
p->data=‘0‘;
p->next=head;
head=p;
i1--;
}
a[i]=head;
i++;
head1=head1->next;
}
Node *mu=NULL;
if(i==1)
{
Node *mk=(Node *)malloc(sizeof(Node));
mk->data=‘0‘;
mk->next=NULL;
return add(mk,a[0]);
}
else if(i==2)
return add(a[0],a[1]);
else
{
mu=add(a[0],a[1]);
for(j=2;j<i;j++)
{
mu=flash_back(mu);
mu=add(mu,a[j]);
}
return mu;
}
}

void print_link(Node *p)
{
Node *head;
head=p;
while(p)
{
if(head->data==‘0‘&&p->next)
{
head=p->next;
p=p->next;
continue;
}
printf("%c",p->data);
p=p->next;
}
/* while(p)
{
printf("%c",p->data);
p=p->next;
}*/
putchar(‘\n‘);
return ;
}

int main(void)
{
Node *p1,*p2,*p3;
int i;
flag=1;
for(i=0; i<10; i++)
a[i]=NULL;
p1=create_link();
p2=create_link();
if(c==‘+‘)
p3=add(p1,p2);
else if(c==‘-‘)
{
comp(p1,p2);
if(flag)
{
p3=sub(p1,p2);
}
else
{
putchar(‘-‘);
p3=sub(p2,p1);
}
}
else if(c==‘*‘)
{
p3=mul(p1,p2);
}
print_link(p3);
return 0;
}

时间: 2024-10-11 22:50:48

链表解大数据相加减相乘的相关文章

算法---大数据相加

开通博客开始第一次写发表算法博客.深知一半算法考试都是用C,C++,由于大四开始到今年毕业工作到现在一直从事C#开发,C++用得很少了.链表,指针也只知道一个概念了.用得没以前熟练了.所以后续更新的算法题我都是基于C#语法的.算法主要体现的是解题思路.跟题目一样,本次算法主要实现大数据相加. 解题思路: 1. 将大数据存储到一个链表中,C#中用List<int>来存储,每个节点表示每一位的数字. {1,2,3,4,5} =>12345 和{9,6,5,9,5} =>96595 (C

大数据相加

页面: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>大数据相加</title> </head> <body> <h3 style="margin-left:800px;margin-top: 200px;">我是大数据相加</h3>

C++ string 实现大整数相加减

任意两个大整数的加减算法,可自动判断正负号,代码如下: #include <iostream> #include <vector> #include <cstring> #include <algorithm> #include <string> using namespace std; string BigInegerAdd(string s1, string s2) // s1+s2; { int len = s1.size()>s2.

杭电OJ1002大数据相加

先输入n ,代表共有几组数字,再输入n组数据 #include<iostream> #include<stdio.h> #include<math.h> #include<string.h> #include<algorithm> #include<malloc.h> using namespace std; char resu[10000]; void Reverse(char a[10000]) { int leng = strl

hadoop大数据平台架构之DKhadoop详解

hadoop大数据平台架构之DKhadoop详解大数据的时代已经来了,信息的爆炸式增长使得越来越多的行业面临这大量数据需要存储和分析的挑战.Hadoop作为一个开源的分布式并行处理平台,以其高拓展.高效率.高可靠等优点越来越受到欢迎.这同时也带动了hadoop商业版的发行.这里就通过大快DKhadoop为大家详细介绍一下hadoop大数据平台架构内容.目前国内的商业发行版hadoop除了大快DKhadoop以外还有像华为云等.虽然发行方不同,但在平台架构上相似,这里就以我比较熟悉的dkhadoo

算法---大整数相加

原文:算法---大整数相加 开通博客开始第一次写发表算法博客.深知一半算法考试都是用C,C++,由于大四开始到今年毕业工作到现在一直从事C#开发,C++用得很少了.链表,指针也只知道一个概念了.用得没以前熟练了.所以后续更新的算法题我都是基于C#语法的.算法主要体现的是解题思路.跟题目一样,本次算法主要实现大数据相加. 解题思路: 1. 将大数据存储到一个链表中,C#中用List<int>来存储,每个节点表示每一位的数字. {1,2,3,4,5} =>12345 和{9,6,5,9,5}

最新大数据24期 共十天高清视频教程 附课件源码

课程目录: 大数据24期-01-JavaSE基础-15天 第一天: 01.什么是计算机软件02.什么数据软件开发--利用编程语言来写剧本03.什么是jdk--怎么安装jdk03.什么是jdk--怎么安装jdk04.安装启动eclipse04.安装启动eclipse05.配置eclipse的字体和布局06.新建一个java的类的步骤07.第一个java编程作品--HelloWorld08.java中的变量定义和变量赋值语法09.第一个java程序中的知识点梳理--终端输入--终端输出10.第二个j

底层战详解使用Java开发Spark程序(DT大数据梦工厂)

Scala开发Spark很多,为什么还要用Java开发原因:1.一般Spark作为数据处理引擎,一般会跟IT其它系统配合,现在业界里面处于霸主地位的是Java,有利于团队的组建,易于移交:2.Scala学习角度讲,比Java难.找Scala的高手比Java难,项目的维护和二次开发比较困难:3.很多人员有Java的基础,确保对Scala不是很熟悉的人可以编写课程中的案例预测:2016年Spark取代Map Reduce,拯救HadoopHadoop+Spark = A winning combat

大数据相乘

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace BigNumberMultiplication { class Program { static void Main(string[] args) { try { int first = 4916; int second = 12345; long result = first * second; Cons