1、问题描述
公司主营业务:做网站、成都做网站、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出泗洪免费做网站回馈大家。
(1)、现在从键盘输入一个整数(以%d格式符输入),要求以装换成字符串的形式输出;
(2)、现在从键盘输入一个小数和小数位数(%lf%d),要求以字符串的形式输出;
这2个问题本身并不难,但是考虑全面和从算法上的优化确实不容易的,需要仔细认真的考虑!
2、用C实现
在VC下面用的VC++6.0版本实现
#includevoid printfInt(int data); void printfDouble(double data, int count); void printfDouble(double data, int count){ int d = (int)data; double x = data - d; int i, tmp; int p = 1; printfInt(d); printf("."); for(i = 0; i < count; i++){ p *= 10; } tmp = (int)(p*x+0.5);//在强转时,由于有截断误差,所以加上0.5,保证了小数点最后一位的取值是正确的。 printfInt(tmp); } void printfInt(int data){ int q = 1; if(data > 1000000000){ q = 1000000000; }else if(data > 100000000){ q = 100000000; }else if(data > 10000000){ q = 10000000; }else if(data > 1000000){ q = 1000000; }else if(data > 100000){ q = 100000; }else if(data > 10000){ q = 10000; }else if(data > 1000){ q = 1000; }else if(data > 100){ q = 100; }else if(data > 10){ q = 10; } for(; q; q /= 10){ printf("%c", '0' + (data/q)%10); } } int main(void){ int number; double x_number; int bit; 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',就转换为一个一个的字符了,输出即可。