Notice: Undefined index: name in /usr/www/lib/views/home/viewtitle.html on line 188
-阅读程序 第 18 题
#include <iostream>
#include <string>
using namespace std;

char base [64] ;
char table [256] ;

void init ()
{
	for (int i=0; i < 26; i++) base[i] = 'A' + i;
	for (int i=0; i < 26; i++) base[26 + i] = 'a' + i;
	for (int i=0; i < 10; i++) base[52 + i] = '0' + i;
	base [62] = '+', base[63] = '/';
	
	for (int i = 0; i < 256; i++) table[i] = 0xff;
	for (int i = 0; i < 64; i++) table[base[i]]= i;
	table ['='] =0;	
}

string encode (string str)
{
	string ret;
	int i;
	for (i=0; i + 3 <= str.size(); i+=3){		
		ret +=base [str [i] >> 2] ;
		ret +=base [ (str [i] &0x03) <<4|str[i+1]>> 4];
		ret +=base [ (str [i +1] &0x0f) <<2|str[i+2]>> 6];
		ret += base [str [i+2] & 0x3f] ;
	}
	if (i < str.size()){
		ret +=base [str [i] >> 2];
		if (i+1==str.size () ) {			
			ret +=base [ (str [i] &0x03) <<4];
			ret +="==";
		}
		else{		
			ret += base [ (str [i] & 0x03) <<4|str[i+1] >> 4];
			ret += base [ (str [i +1] & 0x0f) << 2];
			ret +="=";
		}
	}
	return ret;
}

string decode (string str)
{
	string ret;
	int i;	
	for (i=0; i < str.size(); i +=4){
	ret +=table [str [i] ] <<2|table[str[i+1]]>>4;
	if (str[i + 2] != '=')
		ret += (table[str[i+1]]& 0x0f) << 4|table[str[i+2]] >> 2;
	if (str[i+3] != '=')
		ret += table [str [i + 2] ] << 6|table[str[i +3]];
	}
	return ret;
}

int main ()
{
	init () ;
	cout << int(table[0])<< endl;
	int opt;
	string str;
	cin >> opt >> str;
	cout << (opt ? decode(str) : encode(str))<< endl;
	return 0;
}
假设输入总是合法的(一个整数和一个不含空白字符的字符串,用空格隔开),完成下面的判断题和单选题:
● 判断题
第 1 题 程序总是先输出一行一个整数,再输出一行一个字符串。( )
第 2 题 对于任意不含空白字符的字符串str1,先执行程序输入“0 str1”,得到输出的第二行记为str2;再执行程序输入“1 str2”,输出的第二行必为str1.( )
第 3 题 当输入为“1 SGVsbG93b3JsZA==”时,输出的第二行为“HelloWorld”。( )
● 单选题
第 4 题 设输入字符串长度为 n,encode 函数的时间复杂度为( ).
A. $Θ(\sqrt{n})$
B. $Θ(n)$
C. $Θ(nlogn)$
D. $Θ(n^2)$
第 5 题 输出的第一行为( )。
第 6 题 (4分)当输入为“0 CSP2021csp”时,输出的第二行为( )。

解答部分以后会开放。