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√

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值