110502 Reverse and Add


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

using namespace std;

static bool IsReverse(const char* num, int len)
{
	int mid = len / 2;
	for (int i = 0; i < mid; ++i)
	{
		if (num[i] != num[len - 1 - i])
			return false;
	}

	return true;
}

static int Add(char ch1, char ch2, int& flag)
{
	int sum = (ch1 - '0') + (ch2 - '0') + flag;
	flag = sum / 10;
	return sum % 10;
}

static void GetNewNumber(const char* originalNum, int& len, char*& newNumber)
{
	vector<int> sum;
	int bitSum, flag = 0;
	
	for (int i = len - 1; i >= 0; --i)
	{
		bitSum = Add(originalNum[i], originalNum[len - 1 - i], flag);
		sum.push_back(bitSum);
	}

	if (flag > 0)
		sum.push_back(flag);

	int cnt = sum.size();
	newNumber = new char[cnt + 1];
	for (int i = cnt - 1; i >= 0; --i)
		newNumber[cnt - 1 - i] = sum[i] + '0'; 
	newNumber[cnt] = '\0';
	len = cnt;
}

static void ReverseAndAdd(const char* num, int len)
{
	int sum = 0;

	if (IsReverse(num, len))
	{
		cout << sum << ' ' << num << endl;
		return;
	}

	char *newNumber, *tmp;
	GetNewNumber(num, len, newNumber);
	++sum;
	while(!IsReverse(newNumber, len))
	{
		++sum;
		tmp = newNumber;
		GetNewNumber(tmp, len, newNumber);
		delete[] tmp;
	}

	cout << sum << ' ' << newNumber << endl;
	delete[] newNumber;
}

#define BUF_SIZE 1024
static void Test()
{
	int cnt;
	char buf[BUF_SIZE];
	cin >> cnt;
	for (int i = 0; i < cnt; ++i)
	{
		cin >> buf;
		ReverseAndAdd(buf, strlen(buf));
	}
}

int main(int argc, char* argv[])
{
	Test();
	return 0;
}


在前端开发中,源映射(Source Maps)是一种将压缩或混淆后的代码映射回原始源代码的机制。这种机制在调试时非常有用,因为它允许开发者直接查看和调试原始代码而非经过转换后的版本。 ### 从源映射文件反向工程获取原始 JavaScript 和 CSS 源代码 #### 1. 理解源映射文件结构 源映射文件通常是一个 JSON 文件,包含多个字段,其中最重要的字段是 `sources` 和 `mappings`: - `sources`:列出所有原始源文件的路径。 - `mappings`:定义了压缩文件中的每一行与原始文件之间的映射关系。 例如,一个简单的源映射文件可能如下所示: ```json { "version": 3, "file": "app.min.js", "sourceRoot": "", "sources": ["app.js", "utils.js"], "names": [], "mappings": "AAAA,SAASA,...." } ``` #### 2. 获取源映射文件 源映射文件通常以 `.map` 扩展名结尾,并且会在主资源文件(如 JavaScript 或 CSS 文件)末尾通过注释引用。例如,在 JavaScript 文件中可能会看到以下注释: ```javascript //# sourceMappingURL=app.min.js.map ``` 可以通过浏览器开发者工具(Network 面板)或直接访问 URL 来下载源映射文件。 #### 3. 使用工具解析源映射文件 可以使用多种工具来解析源映射文件并提取原始代码: ##### a. **使用在线工具** 有一些在线工具可以直接上传源映射文件并解析出原始代码,例如 [Source Map Explorer](https://www.npmjs.com/package/source-map-explorer) 或 [Sourcemap.io](https://sourcemap.io/)。 ##### b. **使用命令行工具** 可以使用 `source-map` 库来手动解析源映射文件。以下是一个使用 Node.js 的示例代码: ```bash npm install source-map ``` ```javascript const fs = require('fs'); const sourceMap = require('source-map'); // 读取源映射文件 const rawSourceMap = fs.readFileSync('app.min.js.map', 'utf8'); const sm = await new sourceMap.SourceMapConsumer(rawSourceMap); // 输出原始源文件 console.log(sm.sources); // 获取某个位置的原始信息 const originalPosition = sm.originalPositionFor({ line: 1, column: 0 }); console.log(originalPosition); ``` #### 4. 提取原始代码 一旦获得了源映射文件并通过工具解析,就可以根据 `sources` 字段中的路径去查找原始的 JavaScript 或 CSS 文件。这些文件可能存储在服务器上的某个位置,或者嵌入在源映射文件中(如果启用了内联源代码选项)。 如果源映射文件中包含了原始源代码的内容(即 `"sourcesContent"` 字段),则可以直接从中提取原始代码: ```json { "version": 3, "file": "app.min.js", "sourceRoot": "", "sources": ["app.js", "utils.js"], "sourcesContent": ["function add(a, b) {\n return a + b;\n}", "..."], "names": [], "mappings": "AAAA,SAASA,..." } ``` 在这种情况下,只需读取 `sourcesContent` 字段即可获得原始代码。 #### 5. 安全注意事项 尽管源映射文件对于调试非常有用,但在生产环境中暴露源映射文件可能导致敏感信息泄露。因此,建议在部署到生产环境之前删除源映射文件,或者确保它们不会被公开访问。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值