#include<stdio.h>
int main()
{
int a,b,c,d,e;
int num,n;
int p;
printf("请输入一个0-99999的正整数:");
scanf("%d",&num);
if(num>99999||num<0)
printf("输入错误");
else if(num>9999)
n=5;
else if(num>999)
n=4;
else if(num>99)
n=3;
else if(num>9)
n=2;
else if(num>0)
n=1;
printf("\n输入的数字是%d位数\n",n);
a=num/10000;
b=(num-a*10000)/1000;
c=(num-a*10000-b*1000)/100;
d=(num-a*10000-b*1000-c*100)/10;
e=num-a*10000-b*1000-c*100-d*10;
printf("每一位数字为:%d,%d,%d,%d,%d\n",a,b,c,d,e);
printf("数字逆序为:%d%d%d%d%d",e,d,c,b,a);
return 0;
}
C的基础有点差,写出来代码很糙,只是能单纯的解决问题而已;
这个也是自己的作业,做出来就直接贴过来了;
这也是我自己第一次写博客,有了更优的解决办法再改,以后慢慢进步。
#include<stdio.h>
#include<math.h>
int GetFigures(int n)
{
int count = 0;
if(n == 0)
{
return 1;
}
do
{
count++;
n /= 10;
}while(n != 0);
return count ;
}
void PrintOrder(int n)
{
int a=GetFigures(n);
int i;
int b;
i=pow(10.0,a-1);
while(n!=0)
{
b=n/i;
printf("%d\n",b);
n%=i;
i/=10;
}
printf("\n");
}
void PrintfReverse(int n)
{
while(n!=0)
{
printf("%d",n%10);
n/=10;
}
printf("\n");
}
int main()
{
int n;
int a;
printf("请输入数字\n");
scanf("%d",&n);
printf("\n");
a = GetFigures(n);
printf("这个数字是%d位数\n\n",a);
printf("各个数位是\n");
PrintOrder(n);
printf("逆序输出:\n ");
PrintfReverse(n);
return 0;
}
修改了自己的代码,上面的代码就作为一个警醒的作用留着,以后的博客中不会出现这种代码。
22.5.9 更新,用数组保存数据
#include<stdio.h>
#include <stdbool.h> // vscode报错 error: unknown type name 'bool'
int main()
{
int num[5]; // 数组保存数据
int count = 0; // 位数
int tmp; //临时结束数据
printf("请输入数字\n");
// 接收键盘输入的数据,遇到回车结束
while(tmp = getchar()){
if(tmp == '\n')
break;
num[count++] = tmp-48;// 与ASCII数值有关,键盘输入时并不能直接获取数组,需要
}
printf("这个数字是 [%d] 位数\n\n",count);
printf("各个数位是\n");
for(int i = 0;i < count;i++){
printf("第 [%d] 位数是 [%d]\n",i+1,num[i]);
}
printf("逆序输出:\n ");
// 当只有一位数字时直接输出
if(count == 1){
print("%d\n",num[0]);
}
else{
bool flag = false; // 用来调控0结尾的逆序输出
for(int i = count-1;i >= 0;i--){
if(num[i] == 0 && flag == false){
continue;
}
else{
flag = true;
printf("%d",num[i]);
}
}
printf("\n");
}
return 0;
}
结果