在对前面学习的数字处理中,主要遇到以下三种问题:
1:输出给定数字的位数;
2:将给定数字按顺序输出;
3:将给定数字逆序输出。
解决:
1:给定数字除以10,去掉个位,计数器加一,依次直到处于结果为0
2:按顺序输出。
a:计算给定数字位数,目的以及关键点寻找与数字位数相同的取余整数例如:给定12345,与其位数相同的整数即为1000,只需要调用第一问的计算位数的函数。
b:计算除余以及除以的数字,此时只需调用库函数pow,即pow(10,c-1),其中c定义为数字的位数。计算其目的是为了弃掉高位。
c:循环打印高位并且取余弃掉高位,同时位数除以10,保证和数字的位数相同。
3:第一步取余得到个位数并且打印,第二步弃掉个位即可,依次循环直到结束。
以下为代码段:
//求给定数字的位数
int GetFigure(int n)
{
int i;
for(i=0;n!=0;i++)
{
n/=10;
}
return i;
}
//计算位数的第二种循环方法
int GetFigure(int n)
{
int count=0;
if(n==0)
{
return 1;
}//判断当数字为0时,输出1
while(n!=0)
{
count++;//满足时位数加一
n/=10;//弃掉个位
}
return count;
}
//替换第二种方法中的while语句
do
{
count++;
n/=10;//弃掉个位
}
while(n!=0);
//按顺序输出各个数字
void PrintfOrder(int n)
{
//得到数字的位数
int c=GetFigure(n);
//得到除以和取余的数字
int m=(int)pow(10.0,c-1);
//顺序输出每位数字
do
{
printf("% d",n/m);//得到高位数字并输出
n%=m;//丢弃高位
m/=10;
}while(n!=0);
printf("\n");
}
//按逆序输出各个数字
void PrintfReverse(int n)
{
/*if(n<0)
{
printf("-");
n=-n;
}*/
do
{
printf("%d",n%10);//打印个位数字
n/=10;//弃掉个位
}
while(n!=0);
printf("/n");
}
设置主函数,在其中调用各个函数打印即可。
完成