2-5:分数化小数
输入和正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b<=10^6,c<=100,输入包含多组数据,结束标记为a=b=c=0。
样例输入:
1 6 4
0 0 0
样例输出
Case 1: 0.1667
高精度小数运算,注意小数的运算原理,模拟手算,关键是最后的进位要回传给整数部分,使用数组保存小数部分。
#include <iostream> #include <stdio.h> using namespace std; int get_dec(int a,int b,int c,int *dec) { int i,carry=0; for(i=0; i<=c; i++) //计算到第c+1位 { a*=10; dec[i]=a/b; a=a%b; } if(dec[c]>=5)//如果最后一位发生进位 { carry=1; for(i=c-1; i>=0; i--)//进位前传 { dec[i]=(dec[i]+carry)%10; carry=(dec[i]+carry)/10; } } return carry;//返回最终的进位 } int main() { int a,b,c; int Int,i; int dec[110]; int cas=0; while(~scanf("%d%d%d",&a,&b,&c)&&(a||b||c)) { Int=a/b; printf("Case %d: %d",++cas,Int+get_dec(a%b,b,c,dec)); if(c) printf("."); for(i=0; i<c; i++) { printf("%d",dec[i]); } printf("\n"); } return 0; }