不是VIP会员,不能显示答案

题目解答

题目:
#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) 程序总是先输出一行一个整数,再输出一行一个字符串。( )

A.正确
B.错误
2) 对于任意不含空白字符的字符串str1,先执行程序输入“0 str1”,得到输出的第二行记为str2;再执行程序输入“1 str2”,输出的第二行必为str1.( )

A.正确
B.错误
3) 当输入为“1 SGVsbG93b3JsZA==”时,输出的第二行为“HelloWorld”。( )
A.正确
B.错误




选择题

4) 设输入字符串长度为 n,encode 函数的时间复杂度为( ).

A.Θ(sqrt(n))
B.Θ(n)
C.Θ(nlogn)
D.Θ(n^2)
5) 输出的第一行为( )。

A.“0xff”
B.“255”
C.“0xFF”
D.“-1”
6) (4分)当输入为“0 CSP2021csp”时,输出的第二行为( )。
A. “Q1NQMjAyMWNzcAv=”
B.“Q1NQMjAyMGNzcA==”
C.“Q1NQMjAyMGNzcAv=”
D.“Q1NQMjAyMWNzcA==”
考点:
分析:
解答:
评论:
老师: