C语言 高精度减法

要过程!快一点,最好9月13号上午之前能发上来!最好解释一下,谢谢!... 要过程!快一点,最好9月13号上午之前能发上来!
最好解释一下,谢谢!
展开
 我来答
huang1196
2008-09-12 · TA获得超过1469个赞
知道小有建树答主
回答量:472
采纳率:0%
帮助的人:594万
展开全部
本人参赛模板(含注释,含高精度加法减法运算,main函数有具体示例):

#include <iostream>
#include <string>
using namespace std;

#define HPSIZE 1024

//长度 //倒序存储
struct HP
{
int len;
int s[HPSIZE + 1];
};

//////////////////////////////////////
//输入,只能是正整数
//////////////////////////////////////
string base_input(string str)
{
char c;

c = getchar();
while(c != '\n')
{
str.push_back(c);
c = getchar();
}

return str;
}

/////////////////////////////////////////
//将一个字符串转换成大数存入a
// a 目标变量
// str 原始数据
/////////////////////////////////////////
HP change(string str)
{
HP a;
int i;

while(str[0] == '0' && str.size() != 1)
str.erase(0, 1);

a.len = (int)str.size();
for(i = 1; i <= a.len; ++i)
a.s[i] = str[a.len - i] - 48;
for (i = a.len + 1; i <= HPSIZE; ++i)
a.s[i] = 0;
return a;
}

/////////////////////////////////////////
//输出
/////////////////////////////////////////
void HPprint(const HP &y)
{
int i;

for(i = y.len; i >= 1; i--)
printf("%d", y.s[i]);
}

////////////////////////////////////////
//比较两数大小
//返回 a>b -> 返回值大于0
// a<b -> 返回值小于0
// a=b -> 返回0
////////////////////////////////////////
int HPcompare(const HP a, const HP b)
{
int len;

len = (a.len>b.len) ? a.len : b.len;
while(len > 0 && a.s[len] == b.s[len])
len--;

if(len==0) return 0;
else return a.s[len] - b.s[len];
}

/////////////////////////////////////
//高精度加法c=a+b
// a, b 加数
// c 和
/////////////////////////////////////
HP HPplus(const HP a, const HP b)
{
HP c;
int i, len;

for(i = 1; i <= HPSIZE; i++)
c.s[i] = 0;
len = (a.len>b.len) ? a.len : b.len;

for(i=1;i<=len;i++)
{
c.s[i] += a.s[i] + b.s[i];
if(c.s[i] >= 10)
{
c.s[i] -= 10;
c.s[i + 1]++;
}
}
if(c.s[len + 1] > 0)
len++;
c.len = len;
return c;
}

////////////////////////////////////
//高精度减法c=a-b
////////////////////////////////////
HP HPsub(const HP a, const HP b)
{
HP c;
int i, len;

for(i = 1; i <= HPSIZE; i++)
c.s[i] = 0;
len = (a.len>b.len) ? a.len : b.len;

for(i = 1; i <= len; i++)
{
c.s[i] += a.s[i] - b.s[i];
if(c.s[i] < 0) //借位
{
c.s[i] += 10;
c.s[i+1]--; //高位存于数组的后部
}
}
while(len > 1 && c.s[len] == 0)
len--;
c.len = len;
return c;
}
int main(void)
{
string str_a, str_b;
HP a, b;
str_a = "1000000"; //初始要运算的数字
str_b = "1000000";
a = change(str_a); //将一个字符串转换成大数存入a
b = change(str_b);
HPprint(HPsub(a, b)); //进行减法运算
return 0;
}
百度网友b913424
2008-09-12 · TA获得超过738个赞
知道小有建树答主
回答量:1379
采纳率:0%
帮助的人:650万
展开全部
没看明白

double f1 = 0.0, f2 = 1.0, f3 = 4.0;

f1 = f3 - f2;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
漾漾没有心
2008-09-12 · TA获得超过1057个赞
知道小有建树答主
回答量:470
采纳率:0%
帮助的人:532万
展开全部
你题目和下面网址完全一样。一看便知。
http://goldhoo.blog.163.com/blog/static/8497659200610284416380/

#include "stdio.h"
#include "conio.h"

main()
{ int a[100]={0},b[100]={0},c[100]={0},m,i=0,k=0,n,sign=1;
char ch;
ch=getchar();
while(ch!='\n')
{a[i]=ch-48;
i++;
ch=getchar(); }
ch=getchar();
while(ch!='\n')
{b[k]=ch-48;
k++;
ch=getchar();}

if(i<k)
sign=-1;
if(i==k)
for(n=0;n<i;n++)
{if(a[n]<b[n])
{sign=-1;break;}
else if(a[n]>b[n])
break;}

m=i>k?i:k;
if(sign==-1)
{printf("-");
for(n=m-1;n>=0;n--)
{c[n]=b[k-1]-a[i-1];
if(c[n]<0)
{c[n]=c[n]+10;
b[k-2]--;}
i--;k--;
if(i<1);
a[i-1]=0; }}

else
for(n=m-1;n>=0;n--)
{c[n]=a[i-1]-b[k-1];
if(c[n]<0)
{c[n]=c[n]+10;
a[i-2]--;}
i--;k--;
if(k<1);
b[k-1]=0; }

for(n=0;n<m;n++)
if(c[n]==0)
continue;
else
break;

if(n==m)
n=m-1;
for(i=n;i<m;i++)
{printf("%d",c[i]);}
getch();}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
贼寇在何方
2008-09-12 · TA获得超过770个赞
知道小有建树答主
回答量:759
采纳率:0%
帮助的人:712万
展开全部
用数组模拟啊,很容易的啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式