您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
1、问题描述
(1)、现在从键盘输入一个整数(以%d格式符输入),要求以装换成字符串的形式输出;
(2)、现在从键盘输入一个小数和小数位数(%lf%d),要求以字符串的形式输出;
这2个问题本身并不难,但是考虑全面和从算法上的优化确实不容易的,需要仔细认真的考虑!
2、用C实现
在VC下面用的VC++6.0版本实现
#include<stdio.h>
void 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',就转换为一个一个的字符了,输出即可。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。