当前位置:   article > 正文

C语言——逆序输出整数和正序分解正整数_c语言逆序输出整数

c语言逆序输出整数

一、逆序输出正整数

eg:

输入:1234      输出:4321

           700                   7

题目解析:

因为是逆序,我们可以通过取余一个个提取最后的个位数,然后将结果乘以10,一个个加进。

eg:123

na=n%10result=result*10+an=n/10
1233=123%103=0*10+312=123/10
122=12%1032=3*10+21=12/10
11=1%10321=32*10+10=1/10

分析表格,我们可以看见,通过一个循环可以完成逆序,循环的条件是n>0,最后输出result。代码如下:

  1. int main()
  2. {
  3. int n,a,result=0;
  4. scanf("%d",&n);
  5. do{
  6. a=n%10;
  7. result=result*10+a;
  8. n=n/10;
  9. }while(n>0);
  10. printf("%d",result);
  11. }

二、用函数逆序输出整数

eg:

输入:-12340 输出:-4321

题目解析:

我们学过逆序输出正整数的实现,与此题相比较,我们需要考虑,当整数为负数的时候,我们要将他转变成正数在进行拆解,输出时再添上负号。同时,要学会使用函数。

  1. #include <stdio.h>
  2. #include <math.h>
  3. int reverse(int num); //函数的引用
  4. int main()
  5. {
  6. int n;
  7. scanf("%d", &n);
  8. printf("%d", reverse(n));
  9. return 0;
  10. }
  11. int reverse(int num)
  12. {
  13. int temp,result=0,symble=1; //temp是最后一位数;result是逆序的结果,初始值为0,symble是正负数的标记
  14. if(num<0) //判断原来的num的正负;若为正,则symble不变,若为负,则symble=-1
  15. {
  16. num=-num;
  17. symble=-1;
  18. } //循环的目的是,把负数转成正数,方便进行下一步
  19. do //do-while循环,逆序输出
  20. {
  21. temp=num%10; //以取余数的方式取num最后一位数
  22. result=result*10+temp;//通过每次循环将取得的temp加进去,将上一个result乘以10将个位数空出来
  23. num=num/10;//num除以十去掉原来的个位数
  24. }
  25. while(num>0);
  26. result=result*symble;//将数的正负表示出来
  27. return result;
  28. }

三、 正序分解正整数

eg:输出12345   输入:1 2 3 4 5  

                                    12345是一个5位数

题目解析:

和逆序提取不同,正序提取需要我们从第一位数提取,我们可以通过循环取整将第一位数依次提取出来,分析输出需求记住每一位数有空格,且要计算n是几位数。

以123为例子,123/100=1,123%100=23.....所以依旧可以用循环讨论

但是我们得算出3位数除以100,四位数除1000....所以还需要一个循坏找mask。mask循环可以同时实现计数几位数。

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int d,t,n,m,cout=1;
  5. scanf("%d",&n);
  6. int mask=1;
  7. t=n; //t和m的作用都是储存n的值
  8. m=n;
  9. while(t>9){ //循环语句算出mask的值
  10. t=t/10;
  11. mask=mask*10;
  12. cout++;
  13. }
  14. while(mask>0){ //循环语句从第一个数开始提取
  15. d=n/mask;
  16. printf("%d",d);
  17. if(mask>9){
  18. printf(" ");
  19. }
  20. n%=mask;
  21. mask/=10;
  22. }
  23. if(mask<1){
  24. printf("\n");
  25. }
  26. printf("%d是%d位数",m,cout);
  27. return 0;
  28. }

四、总结

正序分解和逆序分解都需要用循环解决问题,简单的情况一个循环可以完成,复杂一些则需要多个循环,但是一般不涉及嵌套,但我们得清楚的知道初始值和循环条件,才能将问题解决。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/102210
推荐阅读
相关标签
  

闽ICP备14008679号