1、问题描述

(1)、现在从键盘输入一个整数(以%d格式符输入),要求以装换成字符串的形式输出;

(2)、现在从键盘输入一个小数和小数位数(%lf%d),要求以字符串的形式输出;

这2个问题本身并不难,但是考虑全面和从算法上的优化确实不容易的,需要仔细认真的考虑!

2、用C实现

在VC下面用的VC++6.0版本实现

#include<stdio.h>voidprintfInt(intdata);voidprintfDouble(doubledata,intcount);voidprintfDouble(doubledata,intcount){intd=(int)data;doublex=data-d;inti,tmp;intp=1;printfInt(d);printf(".");for(i=0;i<count;i++){p*=10;}tmp=(int)(p*x+0.5);//在强转时,由于有截断误差,所以加上0.5,保证了小数点最后一位的取值是正确的。printfInt(tmp);}voidprintfInt(intdata){intq=1;if(data>1000000000){q=1000000000;}elseif(data>100000000){q=100000000;}elseif(data>10000000){q=10000000;}elseif(data>1000000){q=1000000;}elseif(data>100000){q=100000;}elseif(data>10000){q=10000;}elseif(data>1000){q=1000;}elseif(data>100){q=100;}elseif(data>10){q=10;}for(;q;q/=10){printf("%c",'0'+(data/q)%10);}}intmain(void){intnumber;doublex_number;intbit;printf("请输入一个整数:");scanf("%d",&number);printf("请输入小数,和小数位数:");scanf("%lf%d",&x_number,&bit);printfInt(number);printf("\n");printfDouble(x_number,bit);printf("\n");}

运行结果

3、算法分析

(1)、我用的是if...else if...else if来判断这个数是几位数,因为用这个数每次/=10也可以判断是几位数,但是效率比较低,用if判断的方法最多10次,就可以知道是几位数字。

(2)、其次,我知道了是几位数,就可以让(data/q)%10,data不变,让q/=10,在循环中每次调用这个语句,就可以从最高位--->最低位顺序取出,再加上'0',就转换为一个一个的字符了,输出即可。