输入两个整数,a和b,他俩都小于32767,求a/b的值,精确到小数点后N位。 (1<=N<=200)位。除尽了,就不需要再继续输出0。C++代码怎么写
时间: 2024-05-11 16:19:35 浏览: 99
js输出数据精确到小数点后n位代码
这里给出一个简单的 C 代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAXN 205
int a[MAXN], ans[MAXN];
int main() {
int n, b, r = 0;
scanf("%d%d", &n, &b);
for (int i = 1; i <= n; ++i) {
scanf("%1d", &a[i]);
}
int pos = 0;
while (a[pos+1] == 0) ++pos; // 找到第一个非零位
for (int i = pos+1; i <= n; ++i) {
r = r * 10 + a[i]; // 将余数扩大10倍再加上下一位数字
ans[i-pos] = r / b; // 计算商
r %= b; // 计算余数
}
printf("%d.", ans[1]); // 输出整数部分
for (int i = 2; i <= n-pos; ++i) {
if (i-1 == 20) break; // 精度达到要求就停止
printf("%d", ans[i]);
}
printf("\n");
return 0;
}
```
首先读入两个整数 $n$ 和 $b$,表示被除数的位数和除数。
然后读入被除数的每一位数字,存在数组 $a$ 中。注意,如果 $a$ 的前面几位是 $0$,我们需要找到第一个非零位。
接下来进入循环,将余数扩大10倍再加上下一位数字,并计算商和余数。注意,这里不需要考虑除不尽的情况,因为除不尽的余数会一直循环下去,直到精度达到要求为止。
最后输出结果。过程中需要注意输出整数部分和小数部分的分隔符。另外,当小数部分的精度达到要求时需要及时停止输出。
时间复杂度为 $O(n)$。
阅读全文