C语言逆向输出

C语言逆向输出,第1张

首先,很欣赏你的要求;然后我来讲讲我的思路,仅供参考:

思路(一):直接用int类型做,判断位数时,当然用循环从小到大循环,用"%"(模)的方式判断;你的第二第三个问题一起做比较好,用求模和整除的方式分割这个数,然后把分割的每一位数累加到另一个int类型上。

思路(二):用字符串做,用库函数strlen很容易判断位数,也很容易输出每位数,以及倒序;其实倒序更容易,只要倒着输出就行,不一定要重新放到另一个字符串中。

思路(三):用递归函数做,用一个int作为计数,一个char类型的用来逐个放置,控制好结束条件,即输入“\n”时结束,然后自然容易做到那3点。

其实,以上逆序的方法都可以换成对称的思路……

*p=0就是给字符串末尾加上'\0'字符,这时p指向字符串最后一个字符,也就是字符串结束符'\0',最上面q=p;也就是将字符串第一个字符地址赋给q,本来p也指向字符串第一个字符,先赋给q,x应该是字符串长度,下面一个for就是给把字符串前一半字符转化为字符0或1,要看x是偶数(为0)还是奇数(为1)。比如字符串character,长度为9,x/=2为4,所以*p++=9%2+'0'也就是第一个字符换成'1',然后接着4/=2为2,*p++=4%2+'0';把第二个字符换成'0',然后接着2/=2为0,*p++=2%2+'0';把第三个字符换成'0'。

至于你画红色星的那块就很简单了,现在是p指向字符串尾巴也就是\0,而q指向第一个字符,所以for中开始要p--;因为\0是不能参与交换的,它是字符串结束标志。所以从倒数第二个字符开始,q<p;条件,也就是交换是否完成。交换后q++,p--;q指向第二个字符,p指向倒数第三个字符,在交换.......,直至q>=p;也就是两者相遇了。下面的话就是借助一个中间值t进行交换,t=*q;先把第一个字符给t,*q=*p;这一步就是把倒数第二个字符赋值第一个字符,*p=t;再把第一个字符赋值给倒数第二个字符。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11266084.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-14
下一篇2023-05-14

发表评论

登录后才能评论

评论列表(0条)

    保存