如何建设公司网站 需要注意什么,一站式装修公司有哪些,wordpress $wp_query,做西服的网站题目#xff1a; 函数原型#xff1a; char * addBinary(char * a, char * b) 思路#xff1a; 二进制相加#xff0c;首先我们考虑先将字符串逆序。由此要写一个逆序函数reserve。字符串逆序后#xff0c;从前往后相加#xff0c;以较长的字符串的长度为标准长度n#… 题目 函数原型 char * addBinary(char * a, char * b) 思路 二进制相加首先我们考虑先将字符串逆序。由此要写一个逆序函数reserve。字符串逆序后从前往后相加以较长的字符串的长度为标准长度n另一未达标准长度字符串以 ‘0’ 补充需要用辅助变量进行辅助相加不可越界赋值为 ‘0’ 。创建新的字符串ans申请空间为 n2 个单位初始化全部为 ‘0’ 。将两个字符串相加后的结果存入ans中这里需要进行字符型数字与整型数字的转换。全部相加完成后判断第 n1 哥字符是否为 ‘0’ 初始时为 ‘0’若仍为 ‘0’ 说明最后一位相加未进位新字符串长度为 n1 第 n1 位赋值 ‘\0’第n2位也赋值为 ‘\0’若不为 ‘0’ 说明最后一位相加进位了第 n1 位有值将第 n2 位赋值为 ‘\0’。最后再逆序新字符串ans字符串逆序只会逆序 ‘\0’ 之前的字符返回新字符串ans 关键1为什么要将字符串逆序后再进行相加 因为二进制相加可能会有进位问题新字符串长度可能加1。如果不逆序需要从后向前相加前面留几个空间取决于相加后会不会进位无法确定。相反逆序后从前向后相加后面可以多留一个空间用于进位如果没有进位该空间可置为 \0 不影响字符串的再逆序。 关键2为什么新的字符串要申请 n2 个空间 因为二进制相加后可能会进位需要预留一个空间再多申请一个空间用于存放 ‘\0’ 作为字符串结束标志。所以一共要多申请两个空间。 关键3如何进行字符型数字于整型数字的转换 字符型数字转整型数字- ‘0’ 整型数字转字符型数字 ‘0’ #include stdio.h
#include string.h
#include stdlib.h
#include memory.hvoid reserve(char* arr)//逆序字符串
{int left 0;int right strlen(arr) - 1;while (left right){char tmp 0;tmp arr[left];arr[left] arr[right];arr[right] tmp;left;right--;}
}char* addBinary(char* a, char* b)
{reserve(a);//逆序方便相加reserve(b);//逆序方便相加int sizea strlen(a);//求长度int sizeb strlen(b);//求长度int n sizea sizeb ? sizea : sizeb;//记下最大的长度char* ans (char*)malloc(sizeof(char) * (n 2));//创建最大长度2的空间因为可能要进位1个空间还有一个空间用于存放\0memset(ans, 0, sizeof(char) * (n 2));//全部初始化为0int i 0;char aa 0;//辅助变量char bb 0;//辅助变量while (i n){if(isizea||isizeb){if (i sizea)//判断相加时是否超出自己的长度超出则补0处理{ans[i] ans[i] - 0 aa - 0 b[i] - 0 0;}if (i sizeb)//判断相加时是否超出自己的长度超出则补0处理{ans[i] ans[i] - 0 a[i] - 0 bb - 0 0;}}else{ans[i] ans[i] - 0 a[i] - 0 b[i] - 0 0;//新的字符串结果}if (ans[i] 2)//进位判断11的情况前一位无进位{ans[i] 0;//当前位置为0ans[i 1] ans[i 1] - 0 1 0;//进位操作}if (ans[i] 3)//进位判断11的情况前一位进位1{ans[i] 1;//当前位置为1ans[i 1] ans[i 1] - 0 1 0;//进位操作}i;}//判断是否字符串长度增加是否进位if (ans[i] ! 0)//进位了{ans[i 1] \0;//最后一位置为\0}else//没有进位{ans[i] \0;//最后一位和倒数第二位都置为\0ans[i 1] \0;}reserve(ans);//逆序昕字符串return ans;//返回新字符串
}