这是大三阅读《算法竞赛入门经典第二版》时写的,当时是为了准备算法题:
关于《算法竞赛入门经典第二版》习题2-5分数化小数问题,网络上有一些代码
#include<stdio.h> int main(void) { int a, b, c; scanf("%d%d%d", &a, &b, &c); printf("%.*f\n", c, (double)a/b); return0; }
我发现采用格式化输出的方法是不正确的,经过测试只能输出16位左右,超出会自动补0
我采用模拟除法的过程,同时对最后一位四舍五入,代码如下:
#include<iostream> using namespace std; int main() { int a,b,c,n,n1; while(scanf("%d",&a)&&scanf("%d",&b)&&scanf("%d",&c)&&(a||b||c)) { for(intcount=0;;count++) { if(count) if(count<=c) printf("%d",n); else { if(n1=a/b>=5) printf("%d",n+1); else printf("%d",n); break; } n=a/b; a=(a-n*b)*10; if(count==1) cout<<"."; } } return 0; }
经过测试,这才是正确的解答
程序运行结果如下:
网友评论