位运算与ASCII码的运用
香蕉在冬天设计了ffdlz函数,将长kk的字符串转换成长3232的字符串。 此ffdlz函数mathcal{f}f的设计如下:
声明长度为3232的数组arr,并将其中的所有元素初始化为0。
取出各位的ASCII值,将长度为kk的字符串中的第ii个ASCII代码添加到arr [ I % 32 ] (1(leqi ) leqk1Ik )。
声明长度为3232的排列bits,将bits[j]作为对arr[31 - j]和arr[j] 1的值进行异或运算的结果(0(leqj(leq310j31 ) )。
计算bits[j] % 85 34并将与此十进制ASCII代码对应的字符输出到结果字符串的第j 1j 1位(0(leqj(leq310j31 ) )。
输入字符串ss后,请实现输出ffdlz函数结果mathcal{f}{s}f(s )的程序。
输入格式
输入包含长度为kk的字符串(32 k 50032k500 )的行,该字符串由大小写和数字组成。 不包括空格。
输出格式
输出为一行,长度为3232的字符串ffdlz的结果
习题的目的
练习左移运算
异或运算练习
练习使用类型转换处理int类型和char类型的关系
样品输入
123456789012345678901234567890123
样品输出
' p*,) ' ebst*,) ' ebst*,) ' ebr
# include stdio.h # include stddef.h # include string.h chars [ 500 ]; int arr[32]; int bits[33]; 输入主((memset ) arr,0,sizeof ) ); //gets(s; scanf('%s ',s ); for(intI=0; s[i]!=' '; I () ARR () I1 ) 31 )=s ) I ); }for(intj=0; j 32; j({bits[j]=(ARR[31-j]^ ) ARR[j]1) ); }for(intj=0; j=31; j () printf('%c ',bits[j] % 85 34 ); }printf((n ); 返回0; }