①命令行
#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所指的字符串 。
- 去年10月|华硕、猫头鹰联名显卡rtx3080猫头鹰版曝光
- 华硕|无套路大牌秒杀8999元起!ROG幻16、ROG魔霸新锐价同618 全年最香
- meta|开机BIOS语言提示
- 华硕|不止旗舰游戏本!ROG官宣幻16翻转版,采用三风扇五热管豪华散热
- cpu|H45处理器+16英寸大屏,华硕无畏家族将迎来新成员,综合体验拉满
- c语言|摩托罗拉官宣:5月10日,神秘发布会?
- CPU|C语言-迭代平方根
- 华硕|5月23日发布!华硕官宣新品轻薄本,预热暗示全系绝色好屏?
- 华硕|疯狂四插槽!华硕/猫头鹰联名RTX 3080曝光
- 对于大户型和别墅来讲|华硕推出灵耀pro三频万兆分布式路由器