如何用C语言链表实现两个实数的四则运算(无论这两个实数有多大)

rockmandhl 2007-04-09 10:33:11
求教:用链表实现两个实数的四则运算(无论这两个实数有多大)

例如:我要求出3254687090656987590687065+2438759843769823746924的值或求出6546102187768423165652-5745768746876413248674531,5674123146786748*8676413415646456465,577574564531231321354645646/65798741654684654654135的值。
问题补充:要使用C语言,不要C++,请高手们编写程序的时候加注释解释个函数之间的功能,特别是进位问题的解决。
...全文
504 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixingzhong 2007-04-17
  • 打赏
  • 举报
回复
演示一下原理 ~
jixingzhong 2007-04-17
  • 打赏
  • 举报
回复
//大数求和(这里可以通过调整Num_Len的来限制数的最大位数)
#include <stdio.h>
#include <string.h>
#define Num_Len 10000
int main()
{
char LN[2][Num_Len];
long MinLen,i,LN_Len[2];
int jw=0,flag,flag1,equal,Temp; //进位:jw 下标:长度更小的那个数的下标flag

printf("Please input two Large Number less than %ld bit\n",Num_Len);
scanf("%s%s",&LN[0],&LN[1]);

LN_Len[0]=strlen(LN[0]);
LN_Len[1]=strlen(LN[1]);

equal=LN_Len[0]==LN_Len[1]?1:0;
flag=LN_Len[0]<LN_Len[1]?0:1;
MinLen=LN_Len[flag]-1;
flag1=1-flag;
LN_Len[flag1]=LN_Len[flag1]-MinLen-1;

for(i=MinLen;i>=0;i--)
{
Temp=LN[flag1][LN_Len[flag1]+i]+LN[flag]<i>+jw;
if(Temp>=106)
{
jw=1;
LN[flag1][LN_Len[flag1]+i]=Temp-58;
}
else
{
jw=0;
LN[flag1][LN_Len[flag1]+i]=Temp-48;
}
}
if(equal==0)
{
Temp=LN[flag1][LN_Len[flag1]+i]+jw;
if(Temp>=58)
{
jw=1;
LN[flag1][LN_Len[flag1]+i]=Temp-10;
}
else
{
jw=0;
LN[flag1][LN_Len[flag1]+i]=Temp;
}

}
printf("两数之和为:\n");
if(jw==1) printf("%d",jw);
printf("%s\n",LN[flag1]);

return -1;
}
fohonet 2007-04-17
  • 打赏
  • 举报
回复

/***********运算顺序:a1 c1 a c a2 c2***************/
/*************** by: fohonet***************/

main()
{ float a1,a2,a;
char c1,c2,c;
a1=0; c1='+'; c=c1; /*把第一个操作数置0,第一个操作符置'+'*/
printf("请输入表达式,以等号结束:\n");
while ((c!='=')&&(c!='\n')) /*'='与'\n'为表达式结束符*/
{
scanf("%f%c",&a,&c); /*读下一对操作数与操作符*/
while (c==' ')scanf("%c",&c); /*消除算式中的空格*/
while (c=='*' || c=='/')
/*若第二操作符为'*'、'\'则先对第二操作符进行运算*/
{
scanf("%f%c",&a2,&c2); /*读第三对操作数与操作符*/
while (c2==' ')
scanf("%c",&c2); /*消除算式中的空格*/
switch (c) /*对第二操作符进行运算*/
{
case '*':a=a*a2; break;
case '/':a=a/a2;
}
c=c2; /*把第三操作符赋给第二操作符变量*/
}
switch (c1) /*第二操作符为'+'、'-'*/
{
case '+':a1=a1+a;break;
case '-':a1=a1-a;
}
c1=c; /*把第二操作符赋给第一操作符变量*/
}
printf("%f\n",a1);
getch();
}
fohonet 2007-04-17
  • 打赏
  • 举报
回复
不论多大数是不可能的,无论什么类型的数都是有一定范围的!
xujianlane 2007-04-17
  • 打赏
  • 举报
回复
你口气就像是个老师

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧