❶ 用c语言编写大数运算,求程序!!!!
我觉得你在存储大数的时候,可以考虑链表的存储方法存储大数,每个结点中只存放一位数字,这样就不会存在存储空间不够的问题,在运算的时候,只要在一个结点中出现双位数,就向后一个结点加个一,也就是对高位进个一,我曾今做过这样一个程序,时间久了,忘了具体的代码,只提供个想法,楼主钻研吧呵呵
❷ 用链表法做大整数四则运算C语言程序
只做了加法,思路应该都是这个
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node *next;
}List,*Link_list;
Link_list create_list(void)
{
Link_list h=NULL;
Link_list s=NULL;
char data=0;
h=(Link_list)malloc(sizeof(List));
h->next=NULL;
h->data=0;
while((data=getchar())=='\n')
{
}
while(1)
{
if(data=='\n')
{
break;
}
s=(Link_list)malloc(sizeof(List));
s->data=data-'0';
s->next=h->next;
h->next=s;
data=getchar();
}
return h;
}
void out_put(Link_list h)
{
Link_list s=NULL;
s=h->next;
while(s!=NULL)
{
printf("%d",s->data);
s=s->next;
}
printf("\n");
}
Link_list add(void)
{
Link_list h=NULL;
Link_list s1=NULL;
Link_list s2=NULL;
Link_list p=NULL;
printf("输入第一个数据以回车结束:\n");
s1=create_list();
s1=s1->next;
printf("输入第二个数据以回车结束:\n");
s2=create_list();
s2=s2->next;
h=(Link_list)malloc(sizeof(List));
h->data=0;
h->next=NULL;
while(s1!=NULL && s2!=NULL)
{
p=(Link_list)malloc(sizeof(List));
p->data=s1->data+s2->data+h->data;
h->data=0;
if(p->data>9)
{
p->data=p->data-10;
h->data=1;
}
p->next=h->next;
h->next=p;
s1=s1->next;
s2=s2->next;
}
while(s1!=NULL)
{
p=(Link_list)malloc(sizeof(List));
p->data=s1->data+h->data;
h->data=0;
if(p->data>9)
{
p->data=p->data-10;
h->data=1;
}
p->next=h->next;
h->next=p;
s1=s1->next;
}
while(s2!=NULL)
{
p=(Link_list)malloc(sizeof(List));
p->data=s2->data+h->data;
h->data=0;
if(p->data>9)
{
p->data=p->data-10;
h->data=1;
}
p->next=h->next;
h->next=p;
s2=s2->next;
}
if(h->data==1)
{
p=(Link_list)malloc(sizeof(List));
p->data=1;
p->next=h->next;
h->next=p;
}
return h;
}
int main()
{
int select = 0;
Link_list h=0;
printf("请选择功能:\n");
printf("1 - 相加\n");
printf("2 - 相减\n");
printf("3 - 相乘\n");
printf("4 - 相除\n");
printf("0 - 退出\n");
while(1)
{
printf("选择功能\n");
scanf("%d",&select);
if(0 == select)
{
break;
}
switch(select)
{
case 1:
h=add();
printf("所求的和:\n");
out_put(h);
break;
case 2:
break;
case 3:
break;
case 4:
break;
default :
printf("输入有误\n");
break;
}
}
}
❸ C语言:用链表表示多项式并完成输入、运算和输出。
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedefintElemType;
/*单项链表声明*/
typedefstructPolynNode{
intcoef;//系数
intexpn;//指数
structPolynNode*next;
}PolynNode,*PolynList;
/*位序(插表尾)输入n元素值建立带表结构单链线性表*/
/*指数系数输入*/
voidCreatePolyn(PolynList&L,intn)
{
inti;
PolynListp,q;
L=(PolynList)malloc(sizeof(PolynNode));//结点
L->next=NULL;
q=L;
printf("输入%d数据 ",n);
for(i=1;i<=n;i++)
{
p=(PolynList)malloc(sizeof(PolynNode));
scanf("%d%d",&p->coef,&p->expn);//指数系数输入
q->next=p;
q=q->next;
}
p->next=NULL;
}
//初始条件:单链表L已存
//操作结:依L每数据元素调用函数vi()旦vi()失败,则操作失败
voidPolynTraverse(PolynListL,void(*vi)(ElemType,ElemType))
{
PolynListp=L->next;
while(p)
{
vi(p->coef,p->expn);
if(p->next)
{
printf("+");//+号输项面没+
}
p=p->next;
}
printf(" ");
}
/*ListTraverse()调用函数(类型要致)*/
voidvisit(ElemTypec,ElemTypee)
{
if(c!=0)
{
printf("%dX^%d",c,e);//格式化输项式每项
}
}
/*项式相加原理:归并*/
/*参数:两已经存项式*/
/*返值:归并新项式结点*/
PolynListMergeList(PolynListLa,PolynListLb)
{
PolynListpa,pb,pc,Lc;
pa=La->next;
pb=Lb->next;
Lc=pc=La;//用La结点作Lc结点
while(pa&&pb)
{
if(pa->expn<pb->expn)
{
pc->next=pa;//指数相等pc指针连指数结点
pc=pa;
pa=pa->next;//指向该结点指针移
}
elseif(pa->expn>pb->expn)
{
pc->next=pb;//pc指针连指数结点
pc=pb;
pb=pb->next;//指向该结点指针移
}
else//(pa->expn=pb->expn)
{
pa->coef=pa->coef+pb->coef;//指数相等系数相加
pc->next=pa;
pc=pa;
pa=pa->next;//两指针都往移
pb=pb->next;
}
}
pc->next=pa?pa:pb;//插入剩余段
returnLc;
}
voidmain()
{
PolynListha,hb,hc;
printf("非递减输入项式ha");
CreatePolyn(ha,5);//位序输入n元素值
printf("非递减输入项式hb");
CreatePolyn(hb,5);//位序输入n元素值
printf("项式ha:");
PolynTraverse(ha,visit);
printf(" ");
printf("项式hb:");
PolynTraverse(hb,visit);
printf(" ");
hc=MergeList(ha,hb);
PolynTraverse(hc,visit);
}
❹ 用c语言编写基于链表的长整数的加减乘除法运算的程序
#include "iostream.h"
void main()
{
int x,y;
cout<<"请输入两个整数,整数之间用空格隔开:"<<endl;
cin>>x>>y;
int he=x+y;
int ji=x*y;
int jian=x-y;
double chu=x/y;
cout<<he<<ji<<jian<<chu;
}
❺ c语言大整数运算问题高分求助各位帮忙,不胜感激 写了一个利用循环链表进行超大整数四则运算的c程序
某些即使小数字运算时却出现内存错误的提示
造成这样的原因很简单,那就是你用小数字运算或无需进位时,运行到这一步时
if(i!=0){
t=insert_after(t,i); /*处理最后一次进位*/
t->next=s; /*指向头结点*/
}
由于不需要进位,所以没执行,导致这一步没执行 “t->next=s; /*指向头结点*/”
所以当执行到这一步
oid printint(NODE *s)
{
if(s->next->data!=-1) /*若不是表头,则输出*/ 由于指针没有回指到头节点,所以这一句会报错
❻ 要求用C语言编写程序实现大整数的四则运算(加、减、乘、除)
如果只是实现(加、减、乘、除)那么,直接用文本文件保存就好,虽然效率略低,但可以保证精确度。
直接按照小学教的加减乘除原理,逐位进行计算,保证无线精确(内存不够大、cpu不够快不算)。 这个我就能做。
❼ C语言求单链表运算,急
你的这个要求是不可能有人满足你的。因为关于 C 语言中的各种链表的编程(单链表、双链表、树形结构等)以及调试,和 C 语言中别的内容相比起来,可以说是在整个 C 语言编程中最困难的。原因如下:
(1)、由于链表的编程必然需要涉及到 C 语言中最难于理解的内容:指针!!而指针内容是 C 语言中功能最为灵活强大、但是同时也是最为抽象、且最难于调试的代码;
(2)、链表还不只是一个 C 语言的问题,它更多的是属于《数据结构》课程中的一个部分。而《数据结构》课程又是计算机软件专业中比较难于掌握的一门课程;
(3)、C 语言源代码的调试过程,它不是只要在纸上写出单链表程序代码,就能够保证程序一定能够运行出正确结果。它必须要在一个编程环境下(例如:Microsoft Visual Studio C++)经过亲自上机编程、编译、链接、运行这几步才能够把程序的最终正确结果调试出来。
以上就是我多年的 C 语言编程的亲身体会。