6441. 特别的除法

输入正整数 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;
}
相关推荐
倒头就睡的小比特15 小时前
算法竞赛C++常用的STL
c++·算法
weilx123415 小时前
C++笔记-文件IO-<fcntl.h>
c++
小羊没烦恼!15 小时前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼16 小时前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
Smileyqp沛沛17 小时前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
C语言小火车17 小时前
C/C++ 为什么需要编译器?
开发语言·c++
旖旎夜光17 小时前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark17 小时前
大规模并行计算中的负载均衡算法研究4
算法
吞下星星的少年·-·18 小时前
C++ 萌新语法入门篇
c++·算法比赛
Because_of_Her118 小时前
并查集-听课笔记
笔记·算法·并查集