关于数字处理,例如计算位数,以及输出每位的数字,首先即是学会 “丢弃高位” 和 “丢弃低位”。
例:给出一个正整数
1,求出它是几位数 2,顺序输出各位数字 3,逆序输出各位数字
c语言中,整数除以整数的结果必然为整数,如15/10=1,31/5=6 ,因此若是给定的正整数为n,我们可以用n/10来丢弃个位,直至当n==0时,丢弃了几次个位,do while循环了几次,n就是几位数,定义count来保存这个数据,作为返回值。
例:如n==1234,令n=n/10=123,count++,count==1,循环了一次
此时n==123,令n=n/10=12,count++,count==2,循环了两次
此时n==12 ,令n=n/10=1,count++,count==3,循环了三次
此时n==1,令n=n/10=0,count++,count==4,循环了四次,n==0,停止循环,故1234是四位数
#include <stdio.h>
#include <math.h>
//求其是几位数
int GetFigures(int n)
{
int count = 0;
do
{
count++;
n /= 10;//丢掉个位
}while(n != 0);
return count;
}
用丢弃高位求得顺序输出各位数字的值,可知n除以n的(位数-1)的次方即可得到n的最高位,然后舍弃高位,即得余数代入n,继续重复上述方法至n==0时,可得每位数的值,这里用c表示n的位数
例:定义power=pow(10.0,c-1)即10的c-1次方。
假如n==1234,则c==4,n/power即为1234/1000==1,得到高位进行输出,进行取余,令n=n%power即n=1234%1000=234,得到余数234,此时位数降低了一位,234是三位数,故而令c-1==3
以此类推,n==234, 234/100==2,得到高位进行输出,令n=234%100=34得到余数34
n==34,34/10==3,得到高位进行输出,令n=34%10=4得到余数4
n==4,4/1==4,得到高位进行输出,令n=4%1=0,此时n==0,停止循环。
//顺序输出各位数字
void PrintOrder(int n)
{
int c = GetFigures(n);
int power = (int)pow(10.0,c-1);注意强转,以防double类型转int类型时易丢失数据
do
{
printf("%d ",n/power);//输出高位
n %= power;//丢弃高位
power /= 10;
}while(n != 0);
printf("\n");
}
用丢弃低位求得逆序输出各位数字的值,可知n%10的余数即是n的最低位,进行输出,接着用n/10来达到丢弃低位,输出下一位的目的,重复上述,直至n==0停止循环
例:假如n==1234, 令n%10即1234%10==4,得到低位进行输出,然后令n=n/10=123 舍弃低位
此时n==123, n%10=123%10==3,得到低位进行输出,令n=n/10=12 舍弃低位
n==12, n%10=12%10==2,得到低位进行输出,令n=n/10=1 舍弃低位
n==1, n%10=1%10==1, 得到低位进行输出, 令n=n/10=0 舍弃低位,此时n=0,停止循环
//逆序输出各位数字
void PrintReverse(int n)
{
do
{
printf("%d ",n%10);//得到个位数字
n /= 10; //丢弃个位
}while(n != 0);
printf("\n");
}
最后建立一个主函数即可联系上面的函数解决本例题
int main()
{
GetFigures(546);
PrintOrder(546);
PrintReverse(546);
return 0;
}
19:02:02
以上为个人意见总结
若有不足或是错误,还望指点