给出一个正整数,要求1.求该数的位数;2.正序输出每一位数字;3.倒序输出每一位数字。
#include<stdio.h>
#include<math.h>
//对正整数进行计数操作,统计时采用统计一位,丢弃最低位的计数方式
int Count(int n)
{
int count=0;
while(n)
{
n=n/10;
count++;
}
return count;
}
//对正整数进行正序打印,通过调用计数函数实现,采用打印最高位,舍弃最高位的打印方式
void Print(int n)
{
if(n==0) printf("0");
while(n)
{
int tmp=pow((double)10,Count(n)-1);
printf("%-3d",n/tmp);
n=n%tmp;
}
printf("\n");
}
//对正整数进行反向输出,先打印对低位(取余),再舍弃最低位(除)
void Reverse_order(int n)
{
if(n==0) printf("0");
while(n)
{
printf("%-3d",n%10);
n=n/10;
}
printf("\n");
}
int main()
{
int n;
printf("请输入一个正整数:");
scanf("%d",&n);
/*
//如果对输入数据有限制,则采用,此为对不大于五位数进行检查
if(n<0 || n>99999)
{
printf("请输入一个不多于5位的正整数:");
scanf("%d",&n);//输入一个正整数
}
*/
printf("%d是一个%d位数\n",n,Count(n));
Print(n);
printf("\n");
Reverse_order(n);
return 0;
}
对此程序进行测试
int main()
{
printf("%d\n",Count(12345677));//测试用例
printf("%d\n",Count(123));
printf("%d\n",Count(0));
printf("%d\n",Count(-1234567));
Reverse_order(12345);
Reverse_order(123456768);
Reverse_order(0);
Reverse_order(-12345);
Printf(1234567);
Printf(0);
Printf(-1234567);
return 0;
}
测试结果:
对正序和逆序的输出,要求算法只能输出一个负号,其更改代码如下所示:
void Print(int n)
{
if(n<0){printf("-"); n=-n;}
if(n==0) printf("0");
while(n)
{
int tmp=pow((double)10,Count(n)-1);
printf("%-3d",n/tmp);
n=n%tmp;
}
printf("\n");
}
//对正整数进行反向输出,先打印对低位(取余),再舍弃最低位(除)
void Reverse_order(int n)
{
if(n<0){printf("-"); n=-n;}
else if(n==0) printf("0");
while(n)
{
printf("%-3d",n%10);
n=n/10;
}
printf("\n");
}
int main()
{
int n;
测试结果: