
①命令行
#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;
【华硕|C语言-字符串相加考虑进位】/*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所指的字符串 。
- 无边框|华硕灵耀X 13体验:AMD锐龙6000系列加持 超轻薄的本子也很能打
- 一、前言:采用Zen3+架构的6000系移动端处理器带来多核性能提升AMDZen3架构的...|A4纸大的锐龙6000轻薄本有多强!华硕灵耀X 13评测
- 文艺辣评丨新东方直播:一场语言的行为艺术?
- c语言|负责任地推荐这3部手机,好看又配置强,用到2026年不成问题
- 笔记本电脑|华硕笔记本电脑问题不断?消费者很糟心
- 华硕灵耀|Surface Laptop Go 2评测:五千元的顶级商务体验
- 华硕笔记本电脑问题不断?消费者很糟心
- 华硕无双|5K预算的新品轻薄本选购,华硕无双堪称最香!120Hz OLED优势明显
- 京东|Java:有哪些快速学习Java语言的技巧?
- 华硕|败家之眼再度来袭?华硕ROG6详细规格遭曝光,网友:实用性大增
