C++输入3行,第1行包含一个高精度数n,第2行包含一个低精度数m,第三行包含一个低精度数k,代表保留的小数位数。(不能用函数)
时间: 2023-06-18 13:02:08 浏览: 159
以下是一个可能的实现,使用字符串来存储高精度数和低精度数,然后进行转换和计算:
```c++
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 1005;
int main() {
char n_str[MAXN], m_str[MAXN], k_str[MAXN];
cin >> n_str >> m_str >> k_str;
int len_n = strlen(n_str), len_m = strlen(m_str), len_k = strlen(k_str);
// 将高精度数转换为整数
int n = 0;
for (int i = 0; i < len_n; i++) {
n = n * 10 + (n_str[i] - '0');
}
// 计算低精度数的整数部分和小数部分
int m_int = 0, m_dec = 0, k = 1;
bool is_dec = false;
for (int i = 0; i < len_m; i++) {
if (m_str[i] == '.') {
is_dec = true;
continue;
}
if (!is_dec) {
m_int = m_int * 10 + (m_str[i] - '0');
} else {
m_dec = m_dec * 10 + (m_str[i] - '0');
k *= 10;
}
}
// 将保留小数位数转换为整数
int p = 0;
for (int i = 0; i < len_k; i++) {
p = p * 10 + (k_str[i] - '0');
}
// 计算结果
int ans_int = n * m_int;
int ans_dec = n * m_dec;
ans_dec /= k;
ans_dec *= p;
ans_int += ans_dec / p;
// 输出结果
cout << ans_int << ".";
ans_dec %= p;
for (int i = 0; i < p; i++) {
ans_dec *= 10;
cout << ans_dec / p;
ans_dec %= p;
}
cout << endl;
return 0;
}
```
注意,这个实现并没有考虑输入不合法的情况,比如高精度数或低精度数以外的字符,或保留小数位数为负数的情况。在实际应用中需要添加相应的输入合法性检查。
阅读全文
相关推荐
















