PAT乙级(Basic Level)练习题 圆周率

题目描述
计算机大牛们都在拼算法,计算圆周率小数点后面的第n位。这涉及到许多除法,现在给你一个被除数和除数,请你计算小数点后n位的值。

输入描述:
输入包含多组数据。每组数据包含三个正整数:被除数a和除数b(1≤a<b≤100),以及精度n(1≤n≤1000)。

输出描述:
对应每组数据,输出a/b的结果,小数后面保留n位(不到n位的补零)。

输入例子:

1 2 5
2 3 3

输出例子:

0.50000
0.666

\color{blue}解题思路:
由于精度n的取值范围为 1≤n≤1000,所以老老实实算吧,别想偷懒。。。
模拟手动计算除法过程即可,补零上商求余

\color{blue}代码实现:

#include <iostream>
using namespace std;

int main() {
    int a = 0, b = 0, n = 0;
    //scanf返回值为正确输入数据的变量个数,当一个变量都没有成功获取数据时,此时返回-1
    while (scanf("%d %d %d", &a, &b, &n) != - 1) {
        string resStr = "";
        int tempNum = a / b;
        //获取整数位
        resStr.append(to_string(tempNum) + ".");
        a %= b;
        //依次求出小数点后的各个位值
        for (int i = 0; i < n; ++i) {
            if (a == 0) {
                //a == 0,说明能整除,后面补n - i个0
                resStr.append(n - i, '0');
                break;
            }
            //模拟小数除法,补零,上商,求余
            a *= 10;
            tempNum = a / b;
            resStr.append(1, tempNum + '0');
            a %= b;
        }
        printf("%s\n", resStr.c_str());
    }
    return 0;
}

在这里插入图片描述

发布了1008 篇原创文章 · 获赞 272 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/qq_41855420/article/details/104700864
今日推荐