| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 855 人关注过本帖
标题:如何用C实现超长实数的四则运算
只看楼主 加入收藏
bjgs2004
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-3-18
收藏
 问题点数:0 回复次数:1 
如何用C实现超长实数的四则运算
用c语言模拟两个长实数(包括小数)的加减乘除四则运算,输入的两个数是字符串形式,用C语言模拟它们四则预算,主要是乘除法。哪位哥哥能给出此算法啊?小妹在此谢过。
搜索更多相关主题的帖子: 实数 运算 
2007-07-26 15:49
vbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:352
专家分:147
注 册:2006-12-30
收藏
得分:0 


以前做过整数的,不支持小数,还过很简单就可以改过来,你先将小数当成整数输入,运算完之后记下之前两个乘数的小数位之和,再将小数位加上就可以了.

#include<stdio.h>
#include<string.h>
void sort(char* a,int n)
{
int i;
char c;
for(i=0;i<=(n-1)/2;i++)
{
c=a[i];
a[i]=a[n-1-i];
a[n-1-i]=c;
}
}
void main()
{
int n1,n2,n3,n4,i,j,k=0;
char A[1000],B[1000],C[1000],D[2000];
char* E;
while(1)
{ D[0]='\0';
gets(A); //A为第一个乘法因子
gets(B); //B为第二个乘法因子
n3=strlen(A);
sort(A,n3);
n4=strlen(B);
sort(B,n4);
for(i=0;i<n3;i++)
{
k=0;
for(j=0;j<n4;j++)
{
C[j]=((A[i]-48)*(B[j]-48)+k)%10+48; //C用于存放A中的每一位与B中的数的乘积
k=((A[i]-48)*(B[j]-48)+k)/10; //D为计算结果
}
if (k==0)
C[j]='\0';
else
{
C[j]=k+48;
C[j+1]='\0';
}
n1=strlen(C);
n2=strlen(D+i);
E=D+i; //E指向D的下一位达到加法的移位
if (n2>n1) n1=n2;
k=0;
for(n2=0;n2<n1;n2++) //下面为高精度加法
{
if (E[n2]>='0'&&E[n2]<='9'&&C[n2]>='0'&&C[n2]<='9')
{
E[n2]=E[n2]+C[n2]-48+k;
if (E[n2]>57)
{
E[n2]=E[n2]-10;
k=1;
}
else
k=0;
}

else if(C[n2]>='0'&&C[n2]<='9')
if((E[n2]=C[n2]+k)>57)
{
E[n2]=E[n2]-10;
k=1;
}
else k=0;
else if(E[n2]>='0'&&E[n2]<='9')
if((E[n2]=E[n2]+k)>57)
{
E[n2]=C[n2]-10;
k=1;
}
else k=0;
}

if (k>0)
{
E[n2]=k+48;
E[n2+1]='\0';
k=0;
}
else
{
E[n2]='\0';
}
}
sort(D,strlen(D));
printf("%s\n",D);
i=0;
while(D[i]!='\0') D[i++]='\0'; //将D清除进行下一次计算
}
}


清远鹏程万里人才网:[url=http://www.]http://www.[/url]zq.,qy.
2007-07-27 18:47
快速回复:如何用C实现超长实数的四则运算
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.053041 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved