C语言程序分析,输入一个数,确定是几位数,输出每一位和按逆序输出每一位

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言程序分析,输入一个数,确定是几位数,输出每一位和按逆序输出每一位相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
int main()

int x;
scanf("%d",&x);
if(x<10)

printf("1位数");
printf("%5d",x);
printf("%5d",x);

else if(100<x<1000)

printf("3位数");
printf("%5d%5d%5d",x/100,x/10%10,x%10);
printf("%5d%d%d",x%10,x/10%10,x/100);

else if(10<x<100)

printf("2位数");
printf("%5d%5d",x/10,x%10);
printf("%5d%d",x%10,x/10);

else if(1000<x<10000)

printf("4位数");
printf("%5d%5d%5d%5d",x/1000,x/100%10,x/10%10,x%10);
printf("%5d%d%d%d",x%10,x/10%10,x/100%10,x/1000);

else

printf("5位数");
printf("%5d%5d%5d%5d%5d",x/10000,x/1000%10,x/100/10%10,x%10);
printf("%5d%d%d%d%d",x%10,x/100/10%10,x/1000%10,x/10000);

return 0;

我这样写的有点问题,请大家看下我暂时没找到,你们写的太高级了,看不懂。

#include <stdio.h>
#include <string.h>
 
char *mFun(char *p, int len) //颠倒数字的函数

    char sp;
    for(int i=0;i<len/2;i++)
    
        sp = p[i];
        p[i] = p[len-i-1];
        p[len-i-1] = sp;
    
    return p;


char* qling(char *p, int len) //从首位查找非0字符,并且返回非0首地址

    if(p[0] == '0')//如果输入的字符串首位没有0则不运行下面的算法直接跳过
    
        for(int i=0;i<len;i++)
        
            if((p[i] == '0') && 
                (p[i+1] != '0'))
            
                   return &p[i+1];
            
            
    
    return 0;


int main(int argc, char* argv[])

    char sbuf[255]=0;
    printf("Put Number:");
    gets(sbuf); //输入数字
    int len = strlen(sbuf); //调用函数算出输入字符串的长度
    char *p = qling(sbuf, len);
    if(p == 0)p = sbuf; //如果返回为0,则表示首位到最高位没有0
    len = strlen(p);
    printf("位数是%d位:%s\\n",len,mFun(p,len)); //调用函数,颠倒数字位置,返回首地址,并且输出
    getchar();
    return 0;

参考技术A

不建议这样做,这样做的话太麻烦了,运算起来很慢,

int main(void)

    int num = 0;
    int numDigit = 0;//用来记录数字的位数
    int numTemp = 0;//用来此变量来参与运算
    printf("please input one number\\n");
    scanf(%d,&num);
    numTemp = num;
    while(numTemp >0)
    
        numTemp = numTemp /10;
        numDigit ++;
    
      printfNumber1(num,numDigit);
    return 0;


void printfNumber1(int num1, int dig)

    int arr[30] = 0;
//  int tempDigit = dig;
    int i = 0;
    for(i = 0;i < dig; i++)
    
        arr[i] = num1 % 10 ;
        num1 = num1 /10;
     
    printf("the number's digit is %d\\n",dig);
    printf("orderly print is");//顺序输出
    for(i = dig -1;i >= 0 ; --i)
    
        printf("%d",arr[i]);
    
    printf("not orderly print is");//反序输出
    for(i = 0;i <dig ; i++)
    
        printf("%d",arr[i]);
    
    return 0;


//没调试,不知道有什么问题没有~!

参考技术B

觉得你这样写不是很好,我简单的写了一个,

下面是运行测试的结果,代码在图片下面,你就参考一下吧。

#include <stdio.h>
#include <string.h>
#define MAX 10  //这个是最大的位数,这里就默认认为数字最多是10位
int main(void)

   int input;  //输入要判断的数字
   while( scanf("%d",&input) != EOF )  //这里是一个循环输入 ,可以输入多组测试数据
   
      int count = 0,i=0,num[MAX]; //这个数组是用来保存数字的各个位置上的数字
      memset(num,-1,sizeof(num));  //将数组全部初始化为-1
      while(input) 
      
         num[i++] = input % 10;  //从低位开始获取数字 ,并保存在数组中
         input = input / 10; 
         count++;   //计数器 +1,这个是计算 数字是多少位的
      
      printf("%d\\n",count);  //输出这个数字是几位
      
      for(i=0; num[i]!= -1; i++) //逆序输出
         printf("%d ",num[i]);
         
      printf("\\n");  //另起一行
      
      for(i--; i>=0; i--)  //顺序输出
         printf("%d ",num[i]);
      printf("\\n\\n");
   
   return 0;

参考技术C 将你输入的每一个数字转换为字符最后加入/0,直接strlen就可以了,逆序就从后面开始输出就可以了,简单啥 参考技术D 给你分析个5位数的 其他的就一样差不多 假如我输出的是5位数 12345
/求商 %求余
万位:12345/10000=1
千位:12345/1000 =12 12%10=2
百位:12345/100=123 123%100=3
十位:12345/10=1234 1234%10=4
个位:12345%10=5
懂了吧 望采纳本回答被提问者和网友采纳

给出一个不多于5位的整数,要求 1求出它是几位数 2分别输出每一位数字 3按逆序输出各位数字,例如原数为321,应输出123

题目描述
给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123
输入
一个不大于5位的数字
输出
三行 第一行 位数 第二行 用空格分开的每个数字,注意最后一个数字后没有空格 第三行 按逆序输出这个数
样例输入
12345
样例输出
5
1 2 3 4 5
54321
程序:
#include<stdio.h>
#include<math.h>
int main()
{
    int a,c,d,count=0,t;
    scanf("%d",&a);
    d=c=a;
    while(c!=0)
    {
        count++;
        t=c%10;
        c=c/10;
    }
    printf("%d\n",count);
    while(a!=0)
    {
        t=a/(int)pow(10,(count-1));
        printf("%d",t);   
        a=a%(int)pow(10,(count-1));    
        if(a%10!=0)        //判断是否是最后 一位数字,若是,则后无空格
          printf(" ");     
        else
          printf("");
        count--;
    }
    printf("\n");
    while(d!=0){
        t=d%10;
        printf("%d",t);
        d=d/10;
    }
    printf("\n");
    return 0;
 }

以上是关于C语言程序分析,输入一个数,确定是几位数,输出每一位和按逆序输出每一位的主要内容,如果未能解决你的问题,请参考以下文章

Java中怎么确定输入的数是几位数

c语言输出100至999之间所有的个位数十位数百位数之和为5的整数

c语言,求任意一个整数各位数字之积

c语言设计 输出1-1000以内,十位数是5的所有整数,每隔5个换一行?

用C语言接收用户输入的一个四位数,用while循环计算个位,十位,百位,千位之和,

用c语言编程:输入一个四位数,求出它的个位、十位、百位、千位