首先我们想到了使用算数运算符“分割”这个整数,同时还需要一个变量来存储整数的位数,然后就可以使用一个循环来解决这个问题,那么要用什么循环去解决呢?由于我们需要处理的数据有待输入,事先不能确定循环次数,所以我们最好的方式是采用do-while循环(使用while循环时遇到输入数据为0时不方便处理)。代码如下:
#include二、逆序输出一个整数的各位数字int main(void) { int num; int a=0; scanf("%d",&num); do { a++; num/=10; }while(num); printf("%d",a); }
现在我们需要将一串数字逆序输出,如何做到呢?一个办法是将这个数字的每一位数字都保存下来然后逆序打印,利用求余的算数运算符来实现这波 *** 作。代码如下:
#includeint main(void) { int num; int a=0; scanf("%d",&num); do { a=num%10; num/=10; printf("%d",a); }while(num); return 0; }
但是这个程序并不完整,比如当我们输入除了最高位其余位均为0的数字时,打印出现的就会是以0开头的数字,在我们看来这并不是一个正确的整数,那么我们又该如何去做呢?直接上代码!
#includeint main(void) { int num; int a=0; scanf("%d",&num); do { a=num%10; num/=10; if(a!=0) printf("%d",a); }while(num); return 0; }
现在我们的程序依旧有问题,那就是:如果0处于整数最高位和最低位之间时,那么将无法输出0这个数字,我们换个思路重新去解决这个问题,这种方式只需要一个while循环即可;
#includeint main(void) { int num,t=0;//注意变量的初始化,要保持好习惯 scanf("%d",&num); while(num!=0)//循环条件依旧 { t=t*10+num%10;//这样写的原因是使得到的数字进位,这样就不用一位一位那么麻烦地输出了 num/=10; } printf("%d",t); }
三、正序输出整数的各位数字,先试一下两次逆序能不能实现,代码如下
#includeint main(void) { int num,t=0,x; scanf("%d",&num); while(num!=0) { t=t*10+num%10; num/=10; } x=0; while(t) { x=x*10+t%10; t/=10; } printf("%d",x); }
很明显不完全可以,为什么呢,因为如果输入的数个位为0的话,在第一次循环的时候我们的变量t就不会发生任何改变,相当于位数少了一次;同理,如果输入的数为70000的话,我们只能够得到7这个数字。我们不妨利用再添加一个变量,此题正解代码如下,含注释!!!
#includeint main(void) { int num,pow=1,x; scanf("%d",&num); int t=num; while(t>9)//这里要注意循环条件不能是t!=0 否则会出现问题 { t/=10; pow*=10; } do { x= num/pow; printf("%d ",x); num%=pow;//每次循环后整数要去掉最高位 pow/=10;//使pow与整数的位数一致 }while(pow>0); return 0; }
此题的另一种写法是:
#includeint main(void) { int num,pow=1,x; scanf("%d",&num); int t=num; while(t>9)//这里要注意循环条件不能是t!=0 否则会出现问题 { t/=10; pow*=10; } while(pow>=1) { x=num/pow; printf("%d ",x); num %= pow; pow/=10; } return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)