输入正整数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
网上有很多错误代码,形如: 或者: 无论C格式,还是C++格式,都是错的!!!因为根本没办法显示几十位的小数! 因此,本题的核心思路只有这一个:数组存储高精度小数。 举例:输入1 6 4, 首先将1扩大到100000,用100000除6,得到16666.666…要求保留小数点后四位,因此四舍五入后为:1667。输出整数部分与该数即可。
由于可能取到小数点后100位,因此所有数据用数组存储,模拟手算除法。
#include //万能头文件
using namespace std;
int main() {
int a, b, c, num = 0; //num做计数器
while(cin >> a >> b >> c && a != 0) {
a = (a%b); //保证分子小于分母
int a1[c+2]; //定义被除数数组
memset(a1, 0, sizeof(a1)); a1[0] = a; //置0
int b1[c+1]; memset(b1, 0, sizeof(b1)); //定义存放结果的数组,置0
for(int i = 0; i =1) //四舍五入
if(b1[c]>=5) b1[c-1]+=1;
cout << "Case " << ++num << ": " << a/b << '.'; //输出
for(int i = 0; i < c; i++) cout << b1[i];
cout << endl;
}
return 0;
}
如果对你产生了帮助,就请给博主点一个小小的赞吧!大家的点赞是我不断更新的最大动力!