PAT basic 1048 数字加密 (20分) C++ 测试点2 5 错误原因及解决方案

一、题目描述

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

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

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

输入样例:
1234567 368782971

输出样例:
3695Q8118

二、代码

//1048
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include<stack>
#include<stdlib.h>
using namespace std;


int main()
{
	string a, b;
	cin >> a >> b;
	if (a.size() > b.size())
	{
		while (a.size() > b.size())
		{
			b = "0" + b;
		}
	}
	else
		if (a.size() < b.size())
		{
			cout << b.substr(0, b.size() - a.size());
			b = b.substr(b.size() - a.size(),a.size());
		}
	//cout << "a:" << a << endl;
	//cout << "b:" << b << endl;
	
	char re[13] = { '0','1','2','3','4','5','6',
					'7','8','9','J','Q','K' };
	int temp;
	stack<char>s;
	for (int i = 1,j=a.size()-1; j>=0; i++,j--)
	{
		if (i % 2 == 1)//奇数位
		{
			s.push(re[(a[j] - '0' + b[j] - '0') % 13]);
		}
		else//偶数位
		{
			temp = b[j] - a[j];
			if (temp < 0)
				temp += 10;
			s.push(temp + '0');
		}
	}
	while (s.size() > 0)
	{
		cout << s.top();
		s.pop();
	}
	system("pause");
	return 0;
}

三、运行结果

在这里插入图片描述

四、测试点2 5 错误原因及解决方法

在b的长度比a小时,需要在b串前面补0

题目合集

在这里呦~

发布了81 篇原创文章 · 获赞 2 · 访问量 1994

猜你喜欢

转载自blog.csdn.net/qq_44352065/article/details/104168192
今日推荐