高精度计算 /*高精度的加法运算*/

Posted gE_nis

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高精度计算 /*高精度的加法运算*/相关的知识,希望对你有一定的参考价值。

 

例 高精度加法运算

输入正整数 a 和 b,输出 a+b 的值。0<a,b<=10^250

输入: 

     第一行:a

     第二行:b

   输出:a+b 的和。

     样例输入: 99

         999

   样例输出: 1098 

   

    分析: (1)加法运算      …… a[7]  a[6]  a[5]  a[4]  a[3]  a[2]  a[1]

             …+…   0      0    b[5]  b[4]  b[3]  b[2]  b[1] 

              ——————————————————————————————————
 
                 ……  c[7]  c[6]  c[5]  c[4]  c[3]  c[2]  c[1]
 
  运算的次数=max(la,lb)

(2)程序实现: 方法一:模拟手工计算,设置一个进位变量 m

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

char s1[300], s2[300];
int a[300], b[300], c[300];

int main()
{
	int la, lb, lc, m=0;
	cin >> s1 >> s2;
	la = strlen(s1);
	lb = strlen(s2);
	for(int i=1;i<=la;i++)
		a[i] = s1[la-i] - 48;
	for(int i=1;i<=lb;i++)
		b[i] = s2[lb-i] - 48;
	if(la > lb)
		lc = la;
	else
		lc = lb;
	for(int i=1;i<=lc;i++)
	{
		c[i] = (m+a[i]+b[i]) % 10;
		m = (m+a[i]+b[i]) / 10;
	}
	if(m==1)
	{
		lc++;
		c[lc] = 1;
	}
	for(int i=lc;i>=1;i--)
		cout << c[i];
	cout << endl;
	
	return 0;
}

  

 方法二:先计算,最后处理进位

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

char s1[300], s2[300];
int a[300], b[300], c[300];
int main()
{
	int la, lb, lc;
	cin >> s1 >> s2;
	la = strlen(s1);
	lb = strlen(s2);
	for(int i=1;i<=la;i++)
		a[i] = s1[la-i] - 48;
	for(int i=1;i<=lb;i++)
		b[i] = s2[lb-i] - 48;
	if(la > lb)
		lc = la;
	else
		lc = lb;
	for(int i=1;i<=lc;i++)
		c[i] = a[i]+b[i];
	for(int i=1;i<=lc;i++)
	{
		c[i+1] = c[i+1] + c[i]/10;
		c[i] = c[i] % 10;
	}
	if(c[lc+1] == 1)
		lc++;
	for(int i=lc;i>=1;i--)
		cout << c[i];
	cout << endl;
		
	
	return 0;
}

  

 

以上是关于高精度计算 /*高精度的加法运算*/的主要内容,如果未能解决你的问题,请参考以下文章

C++高精度加法

高精度问题,C语言,求二的n次方

高精度计算:大整数加法

大数运算(加减乘除)

简单高精度加法

从零开始的算法学习生活——①高精度运算