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;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-09-07

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

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;
}


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

第2个回答  推荐于2018-02-28

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

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

#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;
}

第3个回答  2014-09-07
将你输入的每一个数字转换为字符最后加入/0,直接strlen就可以了,逆序就从后面开始输出就可以了,简单啥
第4个回答  2014-09-07
给你分析个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
懂了吧 望采纳本回答被提问者和网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网