是否有可能使用相同的输出替换一个双精度数并仅使用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)之间用逗号打印出来 但是这听起来像我的最后一招......
在此先感谢。
答
要打印的浮点状从整数文本需要标志,而-数部分和小数部分
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个的整数部分的一小部分点输出:numerator
,denominator
需要缩放(例如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);
的除法的余数是不一样的小数点后的部分。 – Barmar
'.'是一个周期或小数点,逗号是',' – Barmar
如果您是确定用表达结果于级分形式:'的printf( “%d%d /%d \ n” 个,Integer_division,余数,num8 +1)' – ikegami