PAT-乙级-1047.编程团体赛

题目

本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。

输入格式:

输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。

输出格式:

在一行中输出加密后的结果。

输入样例:

1234567 368782971

输出样例:

3695Q8118

解法

要点

  • A,B的长度是不一致的,需要在短的前边加上0
#include //score 16 
#include 
#include 
using namespace std;
int main()
{
	int flag=0;
	string a,b;
	cin>>a>>b;
	vector<char> v;
	int i=a.size(),j=b.size();
	if(i<j)
		for(int k=1;k<=j-i;k++)
			a='0'+a;
	else if(i>j)
		for(int k=1;k<=i-j;k++)
			b='0'+b;
	i=a.size()-1;
	while(i>=0)
	{
		if(flag==0)//奇数位 
		{
			int c=((b[i]-'0')+(a[i]-'0'))%13;
			if(c==10)
				v.push_back('J'); 
			else if(c==11)
				v.push_back('Q');
			else if(c==12)
				v.push_back('K');
			else
			{
				char k='0'+c;
				v.push_back(k);
			}
			flag=1;
		}
		else
		{
			int c=(b[i]-a[i]);
			if(c<0)
			{
				char k='0'+c+10;
				v.push_back(k);
			}
			else
			{
				char k='0'+c;
				v.push_back(k);
			}
			flag=0;
		}
		i--;j--;
	}
	for(int j=v.size()-1;j>=0;j--)
		cout<<v[j];
	return 0;
} 

你可能感兴趣的:(OJ)