高精度算法(c++)

2025-10-31 05:54:56

1、高精度加法分为四步:初始化、输入、操作、输出

2、首先是初始化

 char a1[100],b1[100];     

int a[100],b[100],c[100],lena,lenb,lenc,i,x;    

 memset(a,0,sizeof(a));     

memset(b,0,sizeof(b));     

memset(c,0,sizeof(c));                                                     l

3、然后是输入

高精度加法采用字符串的方式输入

gets(a1);  

gets(b1);      

ena=strlen(a1);   

 lenb=strlen(b1);   

 for (i=0;i<=lena-1;i++) a[lena-i]=a1[i]-48;

for (i=0;i<=lenb-1;i++) b[lenb-i]=b1[i]-48;

lenc =1;  

x=0

4、接下来是操作

高精度加法采用按位运算,从最后一位开始运算,如果当前位大于9,就进位

 while (lenc <=lena||lenc <=lenb) 

 {               

c[lenc]=a[lenc]+b[lenc]+x;

x=c[lenc]/10;

c[lenc]%=10;

lenc++; 

 }

 c[lenc]=x;

 if (c[lenc]==0)   lenc--;                                    

5、最后就是输出了,这没有什么难的不过记住要从后往前输

 for (i=lenc;i>=1;i--)    cout<<c[i]; 

cout<<endl;   

6、最后总结一下,给一个源代码

高精度算法(c++)

1、高精度减法也分为四步:初始化、输入、操作、输出

高精度减法类似加法,可以用竖式求减法。在做减法运算时,需要注意的是:被减数必须比减数大,同时需要处理借位。

2、首先初始化

 int a[256],b[256],c[256],lena,lenb,lenc,i;   

char n[256],n1[256],n2[256];   

memset(a,0,sizeof(a));   

memset(b,0,sizeof(b));   

memset(c,0,sizeof(c));   

3、输入  

gets(n1);   

gets(n2);

if (strlen(n1)<strlen(n2)||(strlen(n1)==strlen(n2)&&strcmp(n1,n2)<0)) //strcmp()为字符串比较函数,当n1==n2, 返回0,n1>n2时,返回正整数;n1<n2时,返回负整数

 {

strcpy(n,n1);

strcpy(n1,n2); 

strcpy(n2,n);

 cout<<"-"; //交换了减数和被减数,结果为负数 

 }

 lena=strlen(n1); lenb=strlen(n2);      

 for (i=0;i<=lena-1;i++) a[lena-i]=int(n1[i]-'0');  //被减数放入a数组      

 for (i=0;i<=lenb-1;i++) b[lenb-i]=int(n2[i]-'0');  //减数放入b数组         

4、操作

  i=1;   

while (i<=lena||i<=lenb)   

{   

if (a[i]<b[i])   

{  

 a[i]+=10;               //不够减,那么向高位借1当10   

a[i+1]--;  

 }   

c[i]=a[i]-b[i];                        //对应位相减  

 i++;  

 }  

 lenc=i;   

while ((c[lenc]==0)&&(lenc>1)) lenc--;   //最高位的0不输出       

for (i=lenc;i>=1;i--) cout<<c[i];               //输出结果   

cout<<endl;  

 return 0;  

}   

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢