题目描述
计算机大牛们都在拼算法,计算圆周率小数点后面的第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
由于精度n的取值范围为 1≤n≤1000
,所以老老实实算吧,别想偷懒。。。
模拟手动计算除法过程即可,补零
、上商
、求余
。
#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;
}