gpt4 book ai didi

c - 是否可以替换 double 并仅使用 C 中的整数编写程序,并具有相同的输出?

转载 作者:行者123 更新时间:2023-11-30 14:54:23 26 4
gpt4 key购买 nike

仅使用整数类型和标准库是否可以编写这样的程序 <stdio.h>在C语言中?余数的输出必须显示为十进制数,逗号后面有两个数字。

#include <stdio.h>

int num1 = 0;
int num2 = 1;
int num3 = 6;
int num4 = 3;
int num5 = 7;
int num6 = 3;
int num7 = 9;
int num8 = 8;

int sum, product, Result;
double division;

int main()
{
sum = num1 + num2 + num3 + num4;
product = num5 * num6 * num7;
Result = ((++product) - (sum++)) * sum;

int Integer_division = Result / (num8+ 1);
int Remainder = Result % (num8+ 1);
double division = Result / (num8+ 1);

printf("Result = %d\n", Result);
printf("Integer division = %d\n", Integer_division);
printf("Remainder = %d\n", Remainder);
printf("Division = %.02f\n", division);

return 0;
}

我正在考虑将其分成两半并在中间用逗号打印(%d.%d)但这听起来像是我最后的手段......

提前致谢。

最佳答案

要从整数打印类似浮点的文本,需要符号、while-number 部分和小数部分

char *sign = Result<0 ? "-":"";
int whole = abs(Integer_division);
char decimal_point = ','; // behind the comma.
int hundredths = abs(Remainder *100/(num8+ 1)); // Convert fraction to

1/100

// now print it
printf("%s%d%c%02d", sign, whole, decimal_point, hundredths);
<小时/>

然而这仅显示截断的结果。 是工作。

使用整数模拟浮点输出的常用方法是将值视为 2 个整数部分的分数:需要缩放的分子分母(例如 x100 为.00 显示)。为简单起见,假设分母 > 0

由于显示精度有限,第一步是舍入。由于下一步将涉及整数除法“向零截断”,并且类似浮点的显示通常是“舍入到最接近的”,因此代码需要添加一个有符号的、未缩放的 0.5 或分母的二分之一。

为了简单起见,假设分母 > 0 并且是奇数,这样我们就可以避免半途而废的情况(甚至更多的工作)。还假设没有 int 溢出以避免更多工作。

int numerator = Result;
int denominator = num8+ 1;
int scale = 100; // to print to 0.xx

int scaled_numerator = numerator * scale;
int scaled_half = denominator / 2;
if (scaled_numerator < 0) scaled_half = -scaled_half;
int rounded_scaled_numerator = scaled_numerator + scaled_half;

现在划分

int scaled_value = rounded_scaled_numerator/denominator;

char *sign = scaled_value<0 ? "-":"";
scaled_value = abs(scaled_value);
int whole = scaled_value / scale;
char decimal_point = ',';
int hundredths = scaled_value % scale;
printf("%s%d%c%02d", sign, whole, decimal_point, hundredths);

关于c - 是否可以替换 double 并仅使用 C 中的整数编写程序,并具有相同的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46780715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com