PTA刷题Basic篇——1048.数字加密——Day(24)

问题描述

在这里插入图片描述
按照题目中给出的规则,对A和B进行加密,输出加密后的数字。

题目分析

显然这里我们只能用字符串去运算,因为这个数字实在是太大了。由于我们把个位数当作1,而我们应该从高位读取字符串并输出,所以我们的输出实际上是倒过来的,所以我们想用内置函数reverse将A和B翻转过来。如果A和B长度不等,就将较短的字符串前面补字符’0’使二者相等。预先处理完成后,我们就可以按规则对两个字符串进行加密了。但是别忘了,我们一开始就把字符串翻转了过来,所以我们还需要再翻转回去。

代码

#include<iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
 	string A,B,result;
 	cin>>A>>B;
    	//倒转字符串
 	reverse(A.begin(),A.end());
 	reverse(B.begin(),B.end());
 	if(A.length() <B.length())
        //字符串拼接,如果长度不一样,则用0补充
        //这里也可以使用C++字符串的append操作
        //这里的语法意思为在A的后面拼接上0,使得A的长度和B的长度相等
        //这里说明一下,通过加和来将字符串拼接的操作很重要,经常会用到
 		A+=string(B.length()-A.length(),'0');
 	else if(A.length() > B.length())
  		B+=string(A.length()-B.length(),'0');
 	int len = B.length();
 	for(int i=0;i !=len;i++){
  		if(i%2 == 0)
  		{
   			int temp = (A[i]+B[i]-'0'-'0')%13;
   			if(temp ==10) result+='J';
   			else if(temp == 11)  result+='Q';
   			else if(temp == 12) result+='K'; 
   			else result+=temp+'0';
  		}
  		else
  		//加'0'表示将数字变为字符串
   		result+=(B[i]-A[i]+10)%10+'0';
 		}
 	reverse(result.begin(),result.end());
 	cout<<result;
}

答题用时14min
Q48——finish√

原创文章 101 获赞 13 访问量 2317

猜你喜欢

转载自blog.csdn.net/weixin_44755413/article/details/105877130