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 <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;
//没调试,不知道有什么问题没有~!
觉得你这样写不是很好,我简单的写了一个,
下面是运行测试的结果,代码在图片下面,你就参考一下吧。
#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
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语言程序分析,输入一个数,确定是几位数,输出每一位和按逆序输出每一位的主要内容,如果未能解决你的问题,请参考以下文章
c语言输出100至999之间所有的个位数十位数百位数之和为5的整数
c语言设计 输出1-1000以内,十位数是5的所有整数,每隔5个换一行?