上海专业的网站建设公司排名,深圳app开发公司排行,温州建设工程监理管理学会网站,制作ppt欢迎来到我的#xff1a;世界
希望作者的文章对你有所帮助#xff0c;有不足的地方还请指正#xff0c;大家一起学习交流 ! 目录 前言填空题#xff1a;第一题第二题第三题 编程题#xff1a;第一题#xff1a;不用加减乘除做加法第二题#xff1a;完全数计算第三题世界
希望作者的文章对你有所帮助有不足的地方还请指正大家一起学习交流 ! 目录 前言填空题第一题第二题第三题 编程题第一题不用加减乘除做加法第二题完全数计算第三题单词倒排 总结 前言 今天是学校开学的第一天真是个特殊的日子步入写博客已经不知不觉有6个月了我能感受写博客越来越从容了那就让我俯视这我所热爱的一切。 填空题
第一题 请问下列程序输出的结果是什么 思路无符号位char类型范围是0~255 所以这题就是让我们寻找等于0的时候 知道-2是11111110变成254同理-1 是11111111变成255最后减到0的时候就跳出循环不满足就继续循环 7 4 1 -2 共(7-1)/313次1- 3 -2即254继续循环 254 251…5 2 -1 共(254-2)/3185次(2- 3 -1 即255继续循环 ) 255 252…6 3 0 共(255-5)/3185次3-30退出循环 所以一共循环了 85853173次 第二题 请问下列程序输出的结果是什么 思路 这道题考察的是隐式类型转换 x是有符号数-1内存中是全1当有符号的x和无符号数进行比较时x会隐式类型转换被当做无符号数是一个很大的数所以会进入(x y),且打印出x is greater 第三题 思路 我们首先要知道x|(x 1)意味着什么 假设x3就是011那么x14就是100按照按位或|的运算原则有1则为1两者都为0则为0所以知道x|(x1)为111,从右往左数第一个0变成了1 总结x|(x1)作用是每次循环把x的二进制中从右往左数的最后一位0变成1 当x所有二进制位的都变成了1那x1就会溢出为0循环结束 而2014的二进制序列是0000 0000 000 0000 0000 0111 1101 1110,所以应该为23 编程题
第一题不用加减乘除做加法 地址oj地址 解题思路 这道题考察的是加法的运算原理 肯定要根据利用数据的二进制位来实现那就需要运用了按位与和按位异或^ 首先知道的运算原则有0则为0两者都为1,则为1 ^的运算原则相同则为0相异则为1; 如果用他们的二进制来计算 假如不需要进位则直接就可以得到答案 如5为1012为010不需要进位则101 ^ 010等于111为7 假如需要进位则需要找出需要进位值再进行1进位 假设两个值 3和2,二进制分别为011和010结果应该为5即101,那就来看二进制011 010,就可以找到需要进位的二进制位再1代表进1位 知道了的运算原则那肯定可以用来进位的时候用 代码实现
int Add(int num1, int num2 ) {// write code hereint temnum1;while(num2){temnum1^num2;//不考虑进位num2(num1num2)1;//考虑进位num1tem;}return tem;
}第二题完全数计算 地址oj地址 解题思路 思路可以看出要为完全数应该其所以的真因子之和要是该完全数的两倍 要遍历该数的所有真因子在加起来判断是否是该数的两倍如果是那就是完全数否则就不是遍历完每个数记得将其记录真因子之和清空 代码实现
int main() {int n0;scanf(%d,n);int i0;int count0;//记录真因子之和int sum0;//记录完全数的个数for(i1;in;i){int j0;for(j1;ji;j){if(i%j0)//是真因子就进入{count(i/j);}}if(count2*i)//真因子之和是否为该数的两倍{sum;}count0;}printf(%d,sum);return 0;
}第三题单词倒排 地址:oj地址 解题思路 思路要满足题目要求的四个条件 根据示例2如果不是构成单词的字符只有26个大写或小写英文字母中的范围内就打印空格. 如果要单词倒排我们可以创造两个数组一个数组存放的原输入的字符串另一个数组用来存放倒排之后的字符串然后打印出来就可以 具体过程 注意设存放原输入的字符串的数组为 arr另一个数组设为num;我们可以在输入进arr数组的时候就进行判断如果不是 (构成单词的字符只有26个大写或小写英文字母)该范围里的就输入一个空格‘ ’ 设置一个指针指right向数组的最后一个元素然后往前找空格找到空格(记录该位置)就代表找到了最后一个单词的首字符然后在依次输入num数组中完成后让指针又回到记录的那个空格的位置判断是否为空格如果是空格就把空格输入num数组的同时指针right往前走直到不是空格这时指针指向的是倒数第二个单词的最后一个字符然后后续按照上述的过程进行循环直到将原来arr数组中的字符串全部都输入进了num数组就跳出总循环 代码实现
#include stdio.hint main() {char arr[10001];char num[10001];char ch 0;int i 0;int j 0;while ((ch getchar()) ! \n) {if ((ch a ch z) || (ch A ch Z))arr[i] ch;elsearr[i] ;i;}int right i - 1;int count 0;//记录这个单词多少个字节while (right 0) {//找到单词的开头位置while (arr[right] ! right 0) {count;right--;}int tem right;//记住这个位置while (count--) //输入num数组{num[j] arr[right 1];j;right;}right tem;while (arr[right] ) //如果是空格也传入num数组{num[j] arr[right];right--;j;}count 0;//记得每次传完单词后要记录新的单词这里要清0}for (i 0; i j; i) {printf(%c, num[i]);}return 0;
}总结 到了最后感谢支持
我还想告诉你的是 ------------对过程全力以赴对结果淡然处之 也是对我自己讲的