输入正整数 a,b,c,输出 a/b 小数形式,精确到小数点后 c 位。
输入格式
共一行,包含三个整数 a,b,c。
输出格式
一个实数,表示结果。
数据范围
1≤a,b≤108,
2≤c≤1000
输入样例:
2 3 6
输出样例:
0.666667
cpp
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
//不能直接用double+printf,double精度不够
// double a,b,c;
// cin>>a>>b>>c;
// double ans=a/b;
// printf("%.8f\n",ans);
// int c=8;printf("%.*f",c,ans);//同上效果
// printf("%8d",123);//占8位右对齐
// printf("%-8d",123);//左对齐
// printf("%10.2f",3.14);//10位,小数点后两位
ll a,b,c;
cin>>a>>b>>c;
ll ans1=a/b;
ll r=a%b;//像列竖式一样余数*10再÷不断往后算小数点后位数
string s;
for(int i=0;i<=c;i++)
{
r*=10;
s+=char(r/b+48);//一位一位往后算。char()是按ASCII码转换的。char(48)是'0'。
r%=b;
}
//四舍五入
if(s[c]>='5')
{
int i=c-1;
while(i>=0&&s[i]=='9')
{
s[i]='0';
i--;
}
if(i>=0) s[i]++;//算是可以用ASCII码来理解吧
else ans1++;
}
cout<<ans1<<".";
for(int i=0;i<c;i++)
cout<<s[i];
cout<<endl;
return 0;
}