怎么用C语言编写一个大整数的四则运算器,求解??(急!!)
接口函数voidAdd(charleft[],charright[],charresult[]);voidSubstract(charleft[],charright[]...
接口函数
void Add(char left[], char right[], char result[]);
void Substract(char left[], char right[], char result[]);
void Multiply(char left[], char right[], char result[]);
void Divide(char left[], char right[], char result[]);
求较完整的源代码.. 展开
void Add(char left[], char right[], char result[]);
void Substract(char left[], char right[], char result[]);
void Multiply(char left[], char right[], char result[]);
void Divide(char left[], char right[], char result[]);
求较完整的源代码.. 展开
展开全部
给你完整代码没意思了,呵呵,给你思路
加法
两个加数长度
la=strlen(a);lb=strlen(b);
lc=la>lb?la:lb; //最长的那个
反序两个加数
strrev(a);strrev(b);
要是字符串的话,需要转换为int型的数组,ab数组一样
for(i=0;a[i];ia++)
a[i]-=48;
处理第一位,也就是个位
c[0]=a[0]+b[0];
处理中间各位
for(i=1;i<lc;i++)
{
c[i]=a[i]+b[i]+c[i-1]/10; //要加上上一位的进位
c[i-1]%=10; //取各位的个位
}
处理最高位
if(c[lc-1]>9)
{
c[lc-1]%=10;
c[lc]=1;
lc++;
}
最后转换回字符串
for(i=0;i<lc;i++)
c[i]+=48;
c[lc]='\0'; //注意要加上字符串结束符,要不然不是字符串,呵呵
反序就是结果了
strrev(c);
c字符串就是结果
减法,前面差不多,只是处理中间和后面的稍微有点区别,
首先,要判断结果是否为负数,这个要只一个标志位
if(strcmp(a.b))
flag=1;
else
{
flag=0;
strcpy(tmp,a);strcpy(a,b);strcpy(b,tmp);//如果是负数,那么要交换ab
}
求长度和反序是必须的,转换为int型也是一样的
处理个位,也一样
中间各位
for(i=1;i<lc;i++)
{
c[i]=a[i]-b[i];
if(c[i-1]<0) //借位
{
c[i]-=1;
c[i-1]+=10;
}
}
处理高位的那些0
while(c[lc-1])
lc--;
转换为char字符串
for(i=0;i<lc;i++)
c[i]+=48;
最后是标志正负号的
if(!flag)
{
c[lc-1]='-';
lc++
}
c[lc]='\0';
strrev(c);
乘法,两个算法
一个是被乘数连续加,并且乘数每次减去1,知道乘数为零,注意的是加的次数要刚好是乘数的个数
这个调用加法和减法就可以,用for循环,呵呵
代码也不算难,要是写不出来,就不要学c了
另一个是小学的竖式
如
123
X 12
----------
246
123
--------
1476
也就是计算中间的个位和多位的乘法,最后对好位置加起来就可以
代码也不是很难,最好做一个一位和多位的乘法子函数,调用,呵呵
除法,道理我只知道一种,就是循环减法,直到被除数小于除数为止,这个应该也不难
记录减得次数就是要得到的数据,还有一个就是余数,就是判断小于除数的那个数据
加法
两个加数长度
la=strlen(a);lb=strlen(b);
lc=la>lb?la:lb; //最长的那个
反序两个加数
strrev(a);strrev(b);
要是字符串的话,需要转换为int型的数组,ab数组一样
for(i=0;a[i];ia++)
a[i]-=48;
处理第一位,也就是个位
c[0]=a[0]+b[0];
处理中间各位
for(i=1;i<lc;i++)
{
c[i]=a[i]+b[i]+c[i-1]/10; //要加上上一位的进位
c[i-1]%=10; //取各位的个位
}
处理最高位
if(c[lc-1]>9)
{
c[lc-1]%=10;
c[lc]=1;
lc++;
}
最后转换回字符串
for(i=0;i<lc;i++)
c[i]+=48;
c[lc]='\0'; //注意要加上字符串结束符,要不然不是字符串,呵呵
反序就是结果了
strrev(c);
c字符串就是结果
减法,前面差不多,只是处理中间和后面的稍微有点区别,
首先,要判断结果是否为负数,这个要只一个标志位
if(strcmp(a.b))
flag=1;
else
{
flag=0;
strcpy(tmp,a);strcpy(a,b);strcpy(b,tmp);//如果是负数,那么要交换ab
}
求长度和反序是必须的,转换为int型也是一样的
处理个位,也一样
中间各位
for(i=1;i<lc;i++)
{
c[i]=a[i]-b[i];
if(c[i-1]<0) //借位
{
c[i]-=1;
c[i-1]+=10;
}
}
处理高位的那些0
while(c[lc-1])
lc--;
转换为char字符串
for(i=0;i<lc;i++)
c[i]+=48;
最后是标志正负号的
if(!flag)
{
c[lc-1]='-';
lc++
}
c[lc]='\0';
strrev(c);
乘法,两个算法
一个是被乘数连续加,并且乘数每次减去1,知道乘数为零,注意的是加的次数要刚好是乘数的个数
这个调用加法和减法就可以,用for循环,呵呵
代码也不算难,要是写不出来,就不要学c了
另一个是小学的竖式
如
123
X 12
----------
246
123
--------
1476
也就是计算中间的个位和多位的乘法,最后对好位置加起来就可以
代码也不是很难,最好做一个一位和多位的乘法子函数,调用,呵呵
除法,道理我只知道一种,就是循环减法,直到被除数小于除数为止,这个应该也不难
记录减得次数就是要得到的数据,还有一个就是余数,就是判断小于除数的那个数据
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
参考小学的加法
低位相加,逢十进一
用字符串储存大数,然后从字符串的末尾开始一位一位的处理
低位相加,逢十进一
用字符串储存大数,然后从字符串的末尾开始一位一位的处理
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是Neu的?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |