①命令行
#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
【华硕|C语言-字符串相加考虑进位】即r所指的字符串 。
- |12代酷睿+华硕好屏,灵耀14 2022水墨蓝带你驰骋职场
- cpu|H45处理器+16英寸大屏,华硕无畏家族将迎来新成员,综合体验拉满
- 华硕|5月23日发布!华硕官宣新品轻薄本,预热暗示全系绝色好屏?
- CPU|华硕官宣首款SSD:只差内存 100%全家桶
- |华硕无畏15 2022值得入手吗?除了12代酷睿外,还有这些亮点
- 华硕|直降2000元 华硕ROG魔霸新锐2022电竞笔记本开启秒杀
- 华硕|“铁公鸡”华硕拔毛了,16+256G降价500,6000mAh+5nm强芯
- 华硕|热搜:iOS16新功能;王者回应取消充值优惠;安卓痛失8%全球份额
- 显示器|200Hz时代已来!华硕抢占电竞显示器刷新率制高点!
- 华硕|到手4299元!华硕无畏15 2022今日开售:12代酷睿+莱茵护眼屏