码迷,mamicode.com
首页 > 其他好文 > 详细

高精度计算(二) /*高精度的加法运算*/

时间:2016-10-30 23:47:36      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:int   高精度计算   strlen   bsp   设置   string   --   变量   using   

 

例 高精度加法运算

输入正整数 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;
}

  

 

高精度计算(二) /*高精度的加法运算*/

标签:int   高精度计算   strlen   bsp   设置   string   --   变量   using   

原文地址:http://www.cnblogs.com/sineagle/p/6014309.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!