用C语言编写一个程序将纯十进小数x转换为r进制的纯小数,要求至多保留n位小数。
时间: 2024-09-25 12:01:50 浏览: 31
在C语言中,你可以使用`printf`函数配合格式化字符串来实现这个功能。以下是一个简单的示例程序,它接受用户输入的小数`x`、基数`r`以及保留的小数位数`n`,然后将其转换为对应的r进制表示并输出:
```c
#include <stdio.h>
#include <math.h>
// 将十进制小数转换为指定进制字符串函数
void decimal_to_radic(int x, int r, char result[], int n) {
if (x == 0) {
result[0] = '0';
result[1] = '\0'; // 结束符
return;
}
int digit;
int i = n; // 右移开始位置
while (x > 0) {
digit = x % r;
result[i--] = digit + '0'; // 字符'0'对应0, '9'对应9
x /= r;
}
if (i < 0) { // 如果原数位不足n位,在前面补0
for (int j = 0; j < -i; ++j)
result[j] = '0';
}
}
int main() {
double x, n_decimal_places;
int r;
printf("请输入十进制小数: ");
scanf("%lf", &x);
printf("请输入进制(2~36): ");
scanf("%d", &r);
// 检查进制是否有效
if (r < 2 || r > 36) {
printf("无效的进制! 进制只能从2到36。\n");
return 1;
}
printf("请输入要保留的小数位数(0~%d): ", INT_MAX / r); // 保证足够大的范围
scanf("%d", &n_decimal_places);
// 由于C语言double精度有限,需要先乘以适当因子转换为整数
long long int scaled_x = (long long int)x * pow(r, n_decimal_places);
char result[50]; // 预留足够的空间存储结果,包括结束符
decimal_to_radic((int)scaled_x, r, result, n_decimal_places);
printf("转换后的%d进制小数是: %.0f\n", r, x / (double)(pow(r, n_decimal_places)));
printf("转换结果: %s\n", result);
return 0;
}
```
当你运行此程序时,它会提示你输入十进制小数、进制和保留的小数位数,然后显示转换的结果。
阅读全文