1。位操作法:
这个方法优点是空间量较小计算更大的整数时不会崩溃,大致思路是:先在宏定义中,将二进制的BCD码设置成相应的整数值,主程序中要设置一个接受数符的字符串,设置一个掩码MASK=1;由于正整数N在计算机中是二进制表示的,故对N进行一次N&=MASK操作可以得到N的最后一位,并且用一个循环把相应的位储存在接受数符的字符串中,然后对N进行>>运算,再进行同样的操作得到第二位,依次类推直到得到N的每一位,最后用PRINTF输出,这个方法相对来说比较好点。
2。递归函数法:
递归函数应该有一个基本值和一个靠近该基本值的函数递推结构,在这个问题中,当数字在0——9时,很容易的可以看出这些数字是0——9,可是当这些数字是两位数时,第一位是对10的取余操作,第二位便是先把该数除十后再对10的取余操作,我们需要用一个逆序对其进行输出,故每次进行s=N%10 N=N/10 调用函数本身的操作 PR(s);当然这个进行的条件是N不是一个个位数,故需要加上一个if(N>=10)的条件,这样当许多次递归直到最后N<10时,函数会从最里一层的函数回到递归函数的开始处,并且同时每次处理掉每次递归没有处理完的PR打印输出项,即会按顺序打出正整数的各位数字,但是由于每次递归,都会分配新的存储空间,故占用空间损耗大,数字一大便很难保正程序的正常了,故不推荐这个方法:
3.谭浩强特别法:
先来个if把这个数分成1位数,两位数,三位数,四位数,五位数的情况,然后对每个种情况相应处理,比如这个数是五位数,就设置数符A=N\10000,B=N\1000...等等,把这五个数符弄出来打印,其他情况同样处理。。。。不过这个方法很笨拙。。并且不适于N十分大的情况,且程序代码是一堆废话,顶多就是个玩具程序,不推荐用此种方法。
#include
#include
int main()
{
int number = 12345;
char string[25];
itoa(number, string, 10);
//String就存储了 12345 的各位数 一个一个读出就可以了
printf("integer = %d string = %s\n", number, string);
return 0;
}
当然也可以通过整出取余的做法
#include
int main() {int a,b=1;
printf("输入一个整数:%d\n",&a);
while(a!=0) {
b=a%10;
a=a/10;
printf("%d",b);
}
变为浮点数,用下面的方法可以实现。
"%m.nf":输出浮点数,m为宽度,n为小数点右边数位
例如: "%3.1f"
输入3852.99
输出3853.0
while(n/10>0)
{
printf("%d",n%10);
n=n/10;
}
printf("%d",n);