- 1楼
如何实现小数点后不固定位数的输出
- 已编辑
- 2楼
目前的思路是手动输出, 即先用floor函数得到整数部分, 然后再逐位输出小数部分直到到达小数点后第c位
虽然我总觉得应该有更简单的办法
- 3楼
个人解答:
#include <stdio.h>
#include <math.h>
int main(void)
{
double d, a, b;
int c, i = 0, n, tmp;
scanf("%lf %lf %d", &a, &b, &c);
d = a / b;
n = floor(d);
printf("%d.", n);
d -= n;
while(i < c+1) {
d *= 10;
// 对于最后一位, 要处理四舍五入
if(i != 0 && i < c) {
n = tmp;
} else if(i == c) {
if(tmp >= 5) {
n++;
}
}
tmp = floor(d);
if(i != 0) {
printf("%d", n);
}
d -= tmp;
i++;
}
return 0;
}
- 已编辑
- 4楼
#include<stdio.h>
int a,b,c,ans[109];
int main(void){
scanf("%d %d %d",&a,&b,&c);
for(int i=0;i<=c+1;i++){
if(a<b){
ans[i]=0;
a=a%b*10;
}
else{
ans[i]=a/b;
a=a%b*10;
}
}
printf("%d",ans[0]);
if(c>0){
printf(".");
}
if(ans[c+1]>=5){
ans[c]++;
}
for(int i=1;i<=c;i++){
printf("%d",ans[i]);
}
printf("\n");
return 0;
}
}
临时出来的思路,具体是通过循环整除+取余来求小数
说实话一点逻辑没有,循环变量的取值还是我猜的,结果样例过了(小声
- 已编辑
- 5楼
先sprintf100位小数位到字符串,然后用std::string转,获得字符"."的位置,然后截取0到.后面c位
- 已编辑
- 6楼
gailium119 新奇的思路。
Akira Salvare 至少对于上面的题目来说, c <= 100
而且即便是long long double的精度也到不了小数点后面一百位吧...
- 7楼
gailium119 c>100
- 已编辑
- 10楼
这必然是个有理数
或许获得其循环节是一个更加通用的解法,适用于c>100
7 个月 后
- 已编辑
- 12楼
时隔很长时间的圆满结局的补全,虽然感觉已经迟了
翻看C++ Primer, 可以使用cout的precision函数来实现小数点后不确定位数的输出
代码如下:
std::cout.precision(c);
std::cout << a/b ;
- 13楼
如果仅限于C语言的话,也可以先用sprint来定制printf需要的格式字符串来解决问题