上海网站建设哪家口碑好WordPress二次元主题等级
2026/6/20 6:43:02 网站建设 项目流程
上海网站建设哪家口碑好,WordPress二次元主题等级,国外设计网站app吗,手机网站登录模板#xff08;一#xff09;.这里所说的回文数是一个数字从前向后和从后向前读是一样的#xff0c;比如是进制的87#xff0c;通过反转相加四步就可以得到回文数#xff0c;如果超过一定的范围以后就输出不是回文数#xff0c;这里需要讨论的是1~10进制和16进制的数字相加以…一.这里所说的回文数是一个数字从前向后和从后向前读是一样的比如是进制的87通过反转相加四步就可以得到回文数如果超过一定的范围以后就输出不是回文数这里需要讨论的是1~10进制和16进制的数字相加以后可不可以成为回文数STEP18778 165 STEP2165561 726STEP3726627 1353 STEP413533531 4884二该如果存储这个数据是一个头痛的事情如果使用longlong的类型也就只能存放2的32次方而且这里还需要有16进制的数字16进制的数字有ABCDEF这样的字符那这样用字符进行存储就顺其自然了顺着这样想下去存放在数组中的是字符但是计算的时候需要用数字那是不是需要两个函数将字符转化为数字还需要将数字转化为字符。接下来如果是需要原数据反转后的数组是不是还需要设计一个函数将进行反转反转完了以后是不是需要加到原来的数据上是不是需要设计一个函数进行两个数组的相加再接着想下去需要判断是不是回文数不能一直这样反转下去不判断什么时候进行判断 是不是回文数。总共的函数就是这些基本思路就是这样。1.字符转数字函数当输入一个字符的时候这个字符如果是1-9中间的字符就将这个字符减去‘0’这里对应的差值就是ASCII中的差值也是这个字符对应的数字字符’1减字符‘0差值就是1也代表传进来的数字是转化的数字是1当这个传进来的这个数字是16进制的时候可能就会出现字符ABCDEF这样的字符这个时候就需要这个字符减去‘A’10,其实和刚才是一样的不过这里的基准是10对比一下0-9转化的样子,假设在后面补个零 c-00十六进制是这样的c-A10,数字转字符也是一样的。int char_to_int(char c) { if (c 9 c 0)//如果是数字就转化为数字返回将字符转化为数字 return c - 0; return c - A 10;//这个里的c可能是大写字母ABCDEF是十六进制的字符要想转为数字先减A再加10 } char int_to_char(int n) { if (n 9 n 0) return n 0; return n A-10; }2.判断回文数和逆序字符串的思路是一样的都是设置两个指针一个指针表示最后面的字符一个指针表示最前面的值判断回文数如果是回文数就返回1不是就返回0大部分返回函数都应该这样设计前面的指针向后面走后面的指针想向前面走如果碰到有个不一样的字符就不是回文数直到rightleft逆序字符串也是一样创建一个临时变量用来存储没走一步就交换直到rightleft,这两个函数都是遍历字符串只不过在遍历的过程中所需要做的操作不一样int is_huiwen(char* str) { assert(str); int left 0; int right strlen(str)-1;//right代表数组下标 while (right left) { if (str[right] ! str[left]) return 0;//说明不相等 right--; left; } return 1;//对比完了都相等 } void reverse(char* str) { assert(str); int left 0; int right strlen(str) - 1;//代表数组下标 while(right left) { char temp str[right]; str[right] str[left]; str[left] temp; left; right--; } }3.这个函数是这个回文数算法中最重要的函数这个函数的思路是这样传入四个参数反转后的数组原数组存放结果的数组传进来需要进行几位进制的数组。参数明白了以后需要计算反转数组的长度为什么不用计算原来数组的长度因为这里的反转数组就是原来的数组反转得到的所以两个数组的长度是一样的设置一个变量用来记录目标数组的下标设置一个sum用来记录需要进位的值计算两个数一定是从低位开始进行计算刚开始时候sum0;jin0;开始循环将原数组最后一个元素加到sum上将反转后的数组也加到sum上这个时候数组中的元素是字符需要转化为数字进行计算你可以想一下再进行十进制计算的步骤这个时候jinsum/N,假设这里的sum8917我们要进行10进制计算进位是不是就是等于117/10.保留整数位就是1接下来应该将数据存放在数组中存放的时候应该将整数取模再放进去转化为字符可以类比十进制这里存放的是原数组和反转数组的最后一位但是放在了目标数组的第一位所以结束后应该反转当计算到最后一位的时候还应该考虑要不要进位所以进入循环有两个条件一个是数组的最大值另一个就是进位是不为真需要进位当进行完了以后这个数组里面最后一个数据可不是‘\0’,需要手动添加void Add_reverseM_M(char* reverseM, char* M, char* result, int N)//反转的数组要判断的数组结果数组进制 { assert(reverseM M); int jin 0; int respos 0; int len_reverseM strlen(reverseM); int len_M strlen(M); int max_len len_M len_reverseM ? len_M : len_reverseM; for (int i 0; i max_len || jin; i)//i从零开始i最大的值或者有需要进位的i { int sum jin;//sum记录进位 if (i len_M) sum char_to_int(M[len_M - 1 - i]);//这个地方是通用写法不仅可以计算长度相同也可不同 if (i len_reverseM)sum char_to_int(reverseM[len_reverseM - 1 - i]); jin sum / N;//看是否需要进位如果sum19,计算的是10进制那么这里jin就是1 result[respos] int_to_char(sum % N);//将得到的结果放到N中 } result[respos] \0;//最后末尾位置要放\0 }数组相同的代码void Add_reverseM_M(char* reverseM, char* M, char* result, int N)//反转的数组要判断的数组结果数组进制 { assert(reverseM M); int jin 0; int respos 0; int len_M strlen(M); for (int i 0; i len_M || jin; i)//i从零开始i最大的值或者有需要进位的i { int sum jin;//sum记录进位 if(ilen_M) { sum char_to_int(M[len_M - 1 - i]); sum char_to_int(reverseM[len_M - 1 - i]); } jin sum / N;//看是否需要进位如果sum19,计算的是10进制那么这里jin就是1 result[respos] int_to_char(sum % N);//将得到的结果放到N中 } result[respos] \0;//最后末尾位置要放\0 }三.写代码的时候一定先捋清楚思路再写否则将花费大量的时间去修改#define _CRT_SECURE_NO_WARNINGS //判断n进制的数字是不是不是回文数从前面向后面读都是一样的看第几次相加后得到是 //必须是在30步以内如果超过了这个步数就不是回文数 //用数组进行存放 #includestdio.h #includestring.h #includeassert.h int is_huiwen(char* str) { assert(str); int left 0; int right strlen(str)-1;//right代表数组下标 while (right left) { if (str[right] ! str[left]) return 0;//说明不相等 right--; left; } return 1;//对比完了都相等 } void reverse(char* str) { assert(str); int left 0; int right strlen(str) - 1;//代表数组下标 while(right left) { char temp str[right]; str[right] str[left]; str[left] temp; left; right--; } } int char_to_int(char c) { if (c 9 c 0)//如果是数字就转化为数字返回将字符转化为数字 return c - 0; return c - A 10;//这个里的c可能是大写字母ABCDEF是十六进制的字符要想转为数字先减A再加10 } char int_to_char(int n) { if (n 9 n 0) return n 0; return n A-10; } void Add_reverseM_M(char* reverseM, char* M, char* result, int N)//反转的数组要判断的数组结果数组进制 { assert(reverseM M); int jin 0; int respos 0; int len_reverseM strlen(reverseM); int len_M strlen(M); int max_len len_M len_reverseM ? len_M : len_reverseM; for (int i 0; i max_len || jin; i)//i从零开始i最大的值或者有需要进位的i { int sum jin;//sum记录进位 if (i len_M) sum char_to_int(M[len_M - 1 - i]);//这个地方是通用写法不仅可以计算长度相同也可不同 if (i len_reverseM)sum char_to_int(reverseM[len_reverseM - 1 - i]); jin sum / N;//看是否需要进位如果sum19,计算的是10进制那么这里jin就是1 result[respos] int_to_char(sum % N);//将得到的结果放到N中 } result[respos] \0;//最后末尾位置要放\0 } int main() { char M[1000] {0};//养成初始化是个好的习惯 int N 0; scanf(%d, N);//N是进制 scanf(%s, M); char result[1000] { 0 }; char reverseM[1000] { 0 }; int step0; while (step30) { if (is_huiwen(M))// { printf(STEP%d, step); return 0; } strcpy(reverseM, M);//将要反转的数组放到reverse中保留原先的数组 reverse(reverseM);//反转数据 Add_reverseM_M(reverseM, M, result,N);//将reverseM和M中的数据加到result中 reverse(result);//相加以后这里的结果是相反的 strcpy(M, result);//将结果放到M中进行下一轮循环 step; } return 0; }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询