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

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

问题描述:

是否有可能写出这样的程序,仅使用整数类型,并在C标准库<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)之间用逗号打印出来 但是这听起来像我的最后一招......

在此先感谢。

+0

的除法的余数是不一样的小数点后的部分。 – Barmar

+0

'.'是一个周期或小数点,逗号是',' – Barmar

+0

如果您是确定用表达结果于级分形式:'的printf( “%d%d /%d \ n” 个,Integer_division,余数,num8 +1)' – ikegami

要打印的浮点状从整数文本需要标志,而-数部分和小数部分

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个的整数部分的一小部分点输出:numeratordenominator需要缩放(例如X100为0.00显示器)。为了简单起见,假定denominator > 0

第一步是由于有限的显示精度四舍五入。由于下一步骤将涉及一个整数除“朝向零截断”和类似的显示浮点通常是“舍入到最近”,代码需要添加一个签名,未缩放的0.5或二分之一的分母。

为简单起见,假设denominator > 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); 
+0

令人惊异的解决方案。作品真的很好,但我不能使用字符 – chumned

+0

我不需要完全解决问题,只有回答这个问题:“是否有可能只使用int和办呢?”但在这里很好的工作... 谢谢。 – chumned

+0

@除了'decimal_point'之外,这里没有'char'。你可以放弃并使用'printf(“%s%d,%02d”,符号,整数,百分之一);'。这里有'char *':'sign,“ - ”,“”,“%s%d%c%02d”'。如果你可以使用'printf()',你的答案必须能够使用'char *'。 – chux