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

Posted gE_nis

tags:

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

高精度的减法运算

求两个大的正整数相减的差。

输入:

共 2 行,第 1 行是被减数 a,第 2 行是减数 b(a > b)。每个大整数不超过 200 位, 不会有多余的前导零。

输出:

一行,即所求的差。

样例输入 9999999999999999999999999999999999999

     9999999999999

样例输出 9999999999999999999999990000000000000

题目来源:http://noi.openjudge.cn/ch0106/11/

分析:

1、借位问题;

   for (int i=1;i<=la;i++)

  {  

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

     {   

        a[i+1]--;

        a[i]+=10;

     }

      a[i]-=b[i];

   }

2、输出时去掉前面多余的 0。 while (a[la]==0&&la>1)la--;
 
程序实现:

//高精度减法运算 
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

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

int main()
{
	int la, lb, m=0;
	cin >> s1 >> s2;
	la = strlen(s1);
	lb = strlen(s2);
	if(strcmp(s1, s2) == 0)
	{
		cout << 0;
		return 0;
	}
	if(la<lb || la==lb && strcmp(s1, s2)<0 )
	{
		cout << "-";
		strcpy(s3, s1);
		strcpy(s1, s2);
		strcpy(s2, s3);
	}
	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;
	for(int i=1;i<=la;i++)
	{
		if(a[i] < b[i])
		{
			a[i+1]--;
			a[i] += 10;
		}
		a[i] -= b[i];
	}
	
	while(a[la] == 0 && la>1)
		la--;
	for(int i=la;i>=1;i--)
		cout << a[i];
	cout << endl;
	
	return 0;
}

  

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

大数运算(加减乘除)

高精度运算 加法减法

高精度运算经典题目-减法神童

减法导致精度问题

高精度运算

高精度算法—减法篇