SSL Linda 2021-03-12 21:05 采纳率: 0%
浏览 50
已结题

请各位帮忙看看,这道题我的代码哪里错了

1498.减法神童

时间限制:1000MS 内存限制:256000KB

题目描述

      贝贝不仅是位加法达人,还会计算减法!别误会,这个减法也不是一般的减法,数字的位数可能多达200位,一般人计算这么大的数字是很吃力的,于是大家都称贝贝为“减法神童”。
   
      现在我们编写一个程序,计算出两个数相减的结果,看看贝贝是否能回答出正确的答案。

输入

第1行是被减数a,第2行是被减数b。(a和b的位数都不为大于200位的正整数)

输出

一行,表示a-b的结果。

【输入样例1】
 8
 2

【输入样例2】
15
20
【输出样例1】
6

【输出样例2】
-5
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int a[211],b[211],c[211],g;
bool flag;
int main()
{
	cin >> s1 >> s2;
	int len1 = s1.size(),len2 = s2.size();

	if(len1 < len2)  {
	swap(s1,s2);
	swap(len1,len2);
	flag = 0;
	}
	int p = 0,q = 0;
	if(len1 == len2)
	{
		if(s1[p] < s2[q])
		{
			swap(s1,s2);
			flag = 0;
		}
		while(s1[p] == s2[q])
		{
			p++,q++;
			if(s1[p] < s2[q])
		{
			swap(s1,s2);
			flag = 0;
			break;
		}
		}
	}
		for(int i = 0;i < len1;i++)
	{
			a[211 - len1 + i] = s1[i] - 48;
	}
	for(int i = 0;i < len2;i++)
	{
			b[211 - len2 + i] = s2[i] -48;
	}
	for(int i = 211;i >= 1;i--)
	{
		if(a[i] - g >= b[i])
		{
			c[i] = a[i] - g - b[i];
			g = 0;
		}
		else
		{
			c[i] = 10 + a[i] - g - b[i];
			g = 1;
		}
	}
	int j = 1;
	while(j < 210 && c[j] == 0) j++;
	if(flag == 0)
	cout << "-";
	for(int i = j;i <= 210;i++)
	cout << c[i];
	return 0;
} 
  • 写回答

0条回答 默认 最新

    报告相同问题?