欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【反思与总结---17】在线OJ⑰

程序员文章站 2022-05-22 15:05:28
...

杨辉三角变形、超长整数加法

题目要求:

<1>.求第N行,第一个偶数出现的位置
<2>.如果没有偶数,则输出-1

解题思路:

<1>.我一开始以为是编程题…没做出来…
<2>.结果看到别人答案居然是找规律??

这样是不是不太合适…应该还是用正常的方法…等答案…

代码示例:

#include<iostream>

using namespace std;

int main()
{
	int n;

	while (cin >> n)
	{
		if (n <= 2)
		{
			cout << -1 << endl;
		}
		else if (n % 2 != 0)
		{
			cout << 2 << endl;
		}
		else if (n % 4 == 0)
		{
			cout << 3 << endl;
		}
		else
		{
			cout << 4 << endl;
		}
	}

	return 0;
}

题目要求:

<1>.输入两个字符串数字
<2>.输出相加后的结果,string型

解题思路:

<1>.针对长短不一的对齐问题,把短的那个补到一样长,使用resize
<2>.从末尾开始相加,flag作为进位标志
<3>.相加的时候-‘0’,把相加好的结果转为char型存入C
<4>.每一位相加的结果%10就是进位的值,比如21,进位就是2
<5>.最后把C逆置,输出C

代码示例:

#include<iostream>
#include<algorithm>
#include<string>

using namespace std;

string AddLongInt(string A, string B)
{
	string C;

	if (A.size() > B.size())
	{
		int n = A.size() - B.size();

		while (n)
		{
			B.insert(B.begin(), '0');
			n--;
		}
	}
	else
	{
		int n = B.size() - A.size();

		while (n)
		{
			A.insert(A.begin(), '0');
			n--;
		}
	}

	int flag = 0;

	for (int i = A.size() - 1; i >= 0; --i)
	{
		int temp = (A[i] - '0') + (B[i] - '0') + flag;
		C += char((temp % 10) + '0');
		flag = temp / 10;
	}

	if (flag == 1)
	{
		C += '1';
	}
	//for (auto& e : C)
	//{
	//	e += '0';
	//}

	reverse(C.begin(),C.end());

	return C;
}

int main()
{
	string A;
	string B;

	while (cin >> A >> B)
	{
		cout << AddLongInt(A, B) << endl;
	}

	system("pause");
	return 0;
}