1.给一个不多于5位的正整数,要求: 一、求它是几位数?二、逆序打印出各位数字。
求几位数,使用循环,利用num除以10循环,例:1234,第一次1234/10=123;第二次123/10=12;第三次12/10=1;第四次1/10=0;结束。
逆序打印,利用num对10取余,即num%10,求得个位后,num/10再求百位的值。例:1234,求个位,1234%10=4;求十位,1234/10=123,123%10=3;求百位,123/10=12,12%10=2;求千位,12/10=1,1%10=1;
#include <stdio.h>
/*给一个不多于5位的正整数,要求: 一、求它是几位数,二、逆序打印出各位数字*/
int Wei(int a);
void Fun(int wei,int num);
int main()
{
int num=0;
printf("输入一个不多于5位的正整数:\n");
scanf("%d",&num);//1234
int wei=Wei(num);
printf("它是%d位数\n",wei);
Fun(wei,num);
printf("\n");
return 0;
}
//求位数
int Wei(int a)
{
int i=0;
for(;a>0;i++)// 1234/10=123,i=1;123/10=12,i=2;12/10=1,i=3;1/10=0,i=4,退出
{
a/=10;
}
return i;
}
//逆序打印
void Fun(int wei,int num)//12345
{
int x=0;
for(int i=1;i<=wei;i++)
{
x=num%10;
printf("%d",x);
num=num/10;
}
return;
}
运行结果:
输入一个不多于5位的正整数:
12345
它是5位数
54321
改进代码后:
#include <stdio.h>
/*给一个不多于5位的正整数,要求: 一、求它是几位数,二、逆序打印出各位数字*/
int *Fun(int num,int *n);
int main()
{
int num=0;
int wei=0;
printf("输入一个不多于5位的正整数:\n");
scanf("%d",&num);
int *p=Fun(num,&wei);
printf("它是%d位数\n",wei);
for(int i=0;i<wei;i++)//循环打印数组num[i]的值;
{
printf("%d",*(p+i));
}
printf("\n");
return 0;
}
int *Fun(int a,int *n)
{
static int num[5]={0};//定义一个数组接收num每位上的数
int i=0;//用来存放num的位数
for(i=0;a>0;i++)
{
num[i]=(a%10);//num对10取余,得到最低位上的数
a/=10;//num/10去掉最后一位;
}
*n=i;//通过指针来改变主函数中wei的值,储存位数。
return num;
}
定义一个数组区存储num每位的数,例:12345,num[0]=12345%10=5;a=12345/10=1234;a>0;
num[1]=1234%10=4;a=1234/10=123;a>0;
num[2]=123%10=3;a=123/10=12;a>0;
num[3]=12%10=2;a=12/10=1;a>0;
num[4]=1%10=1;a=1/10=0;i=5退出循环
利用指针传递num的位数,通过该变*n的值,主函数存储位数的值也发生改变。
子函数的数组需要用static修饰,最后返回,利用指针传递,最后再main中打印出来。