是否有可能替换一个双精度数字,并且只使用C中的整数编写具有相同输出的程序?

是否有可能替换一个双精度数字,并且只使用C中的整数编写具有相同输出的程序?,c,floating-point,type-conversion,int,C,Floating Point,Type Conversion,Int,是否可以编写这样的程序,只使用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() {

是否可以编写这样的程序,只使用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;
}
#包括
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 main()
{
总和=num1+num2+num3+num4;
产品=num5*num6*num7;
结果=(+++积)-(和++)*和;
整数除以=结果/(num8+1);
整数余数=结果%(num8+1);
双除法=结果/(num8+1);
printf(“结果=%d\n”,结果);
printf(“整数除法=%d\n”,整数除法);
printf(“余数=%d\n”,余数);
printf(“分部=%.02f\n”,分部);
返回0;
}
我正在考虑将它分成两半,并在中间用逗号(%d.%d)打印 但这似乎是我最后的选择


提前感谢。

从整数打印类似浮点的文本需要符号,而数字部分和小数部分需要符号

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 

但这只显示一个截断的结果。轮换就是工作

通常使用整数模拟浮点输出的方法,它将值视为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分子=结果;
int分母=num8+1;
整数比例=100;//打印到0.xx
int scaled_分子=分子*比例;
int scaled_half=分母/2;
如果(标度分子<0)标度分子=-标度分子;
整数四舍五入的缩放分子=缩放分子+缩放半;
现在分开

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);
int scaled_value=四舍五入_scaled_分子/分母;

char*sign=scaled\u value除法的余数与小数点后的小数点不同。
是一个句点或小数点,逗号是
,如果您可以用分数形式表示结果:
printf(“%d%d/%d\n”,整数除法,余数,num8+1)
@bamar一些地区使用
,“
作为“小数点”。
(+++乘积)-(总和++)*总和是未定义的行为。单独读写
sum
,没有顺序点。我不需要问题的完整解决方案,只需要回答“是否可以只使用int和?”的问题,但在这里做得很好。。。谢谢。@chumned除了小数点
之外,这里没有字符
。您可以删除它并使用
printf(“%s%d,%02d”,符号,整数,百分之一)。这里有
char*
符号“-”、”、“%s%d%c%02d”
。如果您可以使用
printf()
,那么您的答案必须能够使用
char*
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);