PTA 7-37 输出整数各位数字

首先我想到了先将输入的数逆序,然后再拆解,就能得到正序拆解的数,于是有了以下的代码

#include<stdio.h>
int main()
{
    int x,y,z;     //z是逆序之后的数字
    int sum=0;
    scanf("%d",&x);
    while(x>0){
        y=x%10;
        x=x/10;
        sum=sum*10+y;
    }
    while(sum>0){
        z=sum%10;
        printf("%d ",z);
        sum=sum/10;
    }
    return 0;
 } 

当时写的时候在sum=sum*10+y犹豫了一会,不知道该怎么去处理;编译运行之后,发现正常的数字能够符合条件,但是当尝试了700之后发现输出仅仅是7,程序在第二个循环出现了问题,于是有了以下的方案。

方案一:先测出该整数的总位数,再从最高位开始取余。

#include<stdio.h>
int main(void)
{
    int n;
    int i=1,pow=1;
    int temp;
    scanf("%d",&n);
    temp=n;
    
    while(n/10){  //这时测n的位数,当temp在1-9之间时,循环就已经做好了,但是如果条件是temp,那么i将会继续加1;
        n/=10;
        pow*=10;
        i++;  //计数器,记下temp的位数,作为下一个循环的条件
    }
    while(i){  //此时的n已经发生变化,变成了n的个位数,所以要在开头定义一个变量去代替n 
        printf("%d ",temp/pow);
        temp%=pow;
        pow/=10;
        i--;
    }
    return 0;
}

方案二:引用数组,先从最低位开始取余,最后将数组倒着输出。

#include<stdio.h>
int main(void)
{
	
	int a[50]={0};
	int n;
	int i=0;
	scanf("%d",&n);
	
	if(0==n){  //当n=0时的特殊情况 
		printf("0 \n");
		return 0;
	}
	
	for(i=0;n;i++){
		a[i]=n%10;
		n/=10;
	}
	
	i--;  //数组从a[0]开始,所以i的最大值是n的位数减一,因此这个地方要i-- 
	
	while(i>=0){
		printf("%d ",a[i]);
		i--;
	}
	return 0;
 } 

方案三:将该整数看成若干个数字字符组成的字符串,将字符串中的所有数字逐个输出。

#include<stdio.h>
int main(void)
{
    char c;
    do{
        scanf("%c",&c);
        if(!(c>='0'&&c<='9'))//利用最后输入的回车键也会被看做字符被scanf读取的特点跳出循环 
        break;
        
        printf("%c ",c);
        
    }while(c>='0'&&c<='9');
    
    return 0;
}

或者

#include<stdio.h>
int main(void)
{
    char c;
    c=getchar();
    while(c<='9'&&c>='0'){
        putchar(c);
        printf(" ");
        //printf("%c ",c);
        c=getchar();
    }
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值