蓝桥杯试题 算法提高 高精度减法

蓝桥杯试题 算法提高 高精度减法

题目描述:

资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
  高精度减法
输入格式
  两行,表示两个非负整数a、b,且有a > b。
输出格式
  一行,表示a与b的差
样例输入
1234567890987654321
9999
样例输出
1234567890987644322

解题思路:

其实就是两个数相减,对应位置相减,难点就是借位,具体见代码。

AC代码:

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
char str1[500],str2[500];//输入的原始字符串 
int a[500],b[500];//字符串转化为数组,方便后续计算 
int ans[500];//两个数相减的结果 
int book[500];//记录某个索引位置是否被借位,1:被借位,0:没有被借位 
int main()
{
     
	cin>>str1>>str2;
	int la=0,i,j;
	for(i=strlen(str1)-1;i>=0;i--)//逆序存储字符串str1 
		a[la++]=str1[i]-'0';
	int lb=0;
	for(i=strlen(str2)-1;i>=0;i--)//逆序存储字符串str2
		b[lb++]=str2[i]-'0';
	for(i=0;i<la;i++)
	{
     
		//预处理 
		if(book[i])//该索引位置被借位了
		{
     
			if(a[i]==0)
			{
     
				a[i]=9;
				book[i+1]=1;
			}
			else
				a[i]--;
		}
		//操作减法 
		if(a[i]-b[i]<0)//该索引位置需要借位,借第i+1索引位置的位(注意需要被借位的是第i+1个索引位置 
		{
     
			a[i]=10+a[i];//向下一位(第i+1位)借用1,当做10
			book[i+1]=1; //第i+1个索引位置需要被借位 
		}
		ans[i]=a[i]-b[i];
	}
	for(i=la;i>=0;i--)//找到非零的索引位置 
		if(ans[i])
			break;
	for(j=i;j>=0;j--)//逆序输出结果 
		cout<<ans[j];
	cout<<endl;
	return 0;
}

你可能感兴趣的:(蓝桥,高精度,蓝桥杯)