【c语言|C语言-字符串相加考虑进位】①命令行
#include<stdio.h>
#include<string.h>
~
②定义函数-初始化
/*定义函数和字符串变量 。 */
char *fun(char *s1char *s2char *r)
/*初始化 , 即赋初值 。 */
{int lency=0md;
char *p*q*t;
len=strlen(s1);
/*len=s1的长度=s2的长度 。 */
p=s1+len-1;
/*p用于储存 , s1用于移动 。
s1为数组名 , 指向数组首
q=s2+len-1;
/*q用于储存 , s2用于移动 。
s2为数组名 , 指向数组首
t=r+len;
/*t用于存储p和q
r用于移动 , 指向相加后数据首
*(t+1)='\\0';
/*因为预留一位 , 所以字符串结束字符也向后移动一位 。 */
~
③定义函数-循环函数
while(p>=s1)
{md=*p-'0'+*q-'0'+cy;
/*md表示made decimal创建十进制数 , 即字符串相加后的数值 。 星p-'0'表示将字符转换成数值 。 */
if(md>=10) cy=1;
else cy=0;
/*cy表示carry 进位标志位 。 初始值为0 , 如果有进位 , cy为1 , 下次循环时 , 加在更高一位上 。 */
*t=md%10+'0';
/*星t用于储存 , md用于计算 , cy用于传递进位 。
因为进位md可能大于10 , 所以取余取个位 , +'0'转变为ASCLL码值 。 */
p--;q--;t--;
/*向前移动 , 个位加完 , 加十位 。 */
~
④定义函数-循环结束
if(cy==1) *t='1';
/*循环结束 , 即p<s1 , 由于p移动方向是向高位 , 此时p指向最高位 。
如果cy==1 , 表示进位 , 令指针星t当前处为1 。 */
else while(*r++=*++t);
/*如果cy==0 , 表示最高位没有数 , 令指针星t从当前处后移一位到有数的地方 。 */
return r;
/*相加后r所指字符串作为返回值 。 */
~
⑤主函数
void main()
{char s1[100
s2[100
s3[101
;
/*s123是用于存储字符串的数组 , 考虑相加后可能有进位 , s3开辟101位储存空间 。 */
strcpy(s1\"12345\");
/*初始化s12 , 即赋初值 。 */
strcpy(s2\"54321\");
fun(s1s2s3);
printf(\"%s+%s=%s\\"s1s2s3)
~
⑥思路
1.字符串:s1 , s2 , s3(形参r)
2.字符转换成数值
借助指针:p , q , t
转换成ASCLL码值
即数值:*p , *q , *t
转换成对应整数
即数值:*p-'0' , *q-'0' , md%10+'0'
3.数值转换成字符串:r
即r所指的字符串 。
- 旅游|75岁奶奶为在景区卖水 自学11国语言!无障碍跟老外交流
- c语言|C语言-逆序输出
- 苹果公司|比GPT-3参数少效果还优秀,不愧是Meta AI的大语言模型OPT-175B
- Python|C语言-逆序输出
- 推荐系统|MySQL中如果对子串进行排序? 字符串和数值如何使用order by语句?
- c语言|被高估的大数据时代
- c语言|C语言-结构体单向链表插入结点
- c语言|高通骁龙 8 Gen 1 Plus将于6月发布,解决发热问题及性能提升10%
- c语言|红米K40S大战真我Q5 Pro,价格都是1799元起,谁才是千元机皇
- c语言|与阿里终止合作后的第20天,我的团队解散了