1048. 数字加密(20)

本文介绍了一种特定的大数加密算法实现方法,通过字符串处理技术来完成加密过程。该算法使用两个大数作为输入,根据位数的不同采用加法或减法进行运算,并考虑了输入数字长度不一致的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

输入格式:

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

输出格式:

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

输入样例:
1234567 368782971
输出样例:

3695Q8118

思路分析:同样用字符串存大数,注意两个数位数不对等的情况

代码如下:

#include<stdio.h>
#include<string.h>


int main()
{
	char a[101] , b[101], c[101];
	int j, i, buff,l;
	scanf("%s%s", a, b);
	for (i = strlen(a)-1, j = strlen(b)-1,l=1; i >= 0 &&j >= 0; i--, j--,l++) {
		if (l % 2 == 1) {
			buff = (a[i] - '0' + b[j] - '0') % 13;
			if (buff < 10) {
				c[l - 1] = buff + '0';
			}
			else {
				switch (buff) {
				case 10:c[l - 1] = 'J'; break;
				case 11:c[l - 1] = 'Q'; break;
				case 12:c[l - 1] = 'K'; break;
				}
			}

		}
		if (l % 2 == 0) {
			buff = b[j] - a[i];
			if (buff < 0) {
				c[l - 1] = buff + 10 + '0';
			}
			else
				c[l - 1] = buff + '0';

		}
	}
	while (j>=0) {
		c[l - 1] = b[j];
		j--;
		l++;
	}
	while (i>=0) {
		if (l % 2 == 0) {
			buff = '0' - a[i];
			if (buff < 0) {
				c[l - 1] = buff + 10 + '0';
			}
			else {
				c[l - 1] = '0';
			}

		}
		else {
			c[l - 1] = a[i];
		}
	
		i--;
		l++;
	}
	c[l - 1] = '\0';
	for (i = l - 2; i >= 0; i--) {
		printf("%c", c[i]);
	}
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值