是否可能仅使用C中的int类型将3.005添加到4.70?

问题描述 投票:2回答:3

我被要求输入两个数字,例如3.005、3.70,然后对其进行加,减和乘运算,而无需使用浮点或双精度。我设法以某种方式做了类似我被问到的事情。我分别输入数字。如果我输入“ 3.005”,则首先输入3,然后输入.005。但是由于005不等于0.005,所以我遇到了问题。例如我输入3.005和4.70,当我添加它们时,我得到7.75,这是不正确的。我该如何解决?这就是我输入我的值的方式。

printf("first number:");
scanf("%d.%d",&n1.integer,&n1.fraction);
printf("second number:");
scanf("%d.%d",&n2.integer,&n2.fraction);

这是我添加两个值的功能。

int add(n1,f1,n2,f2,n1digit,n2digit){ //n1-2digit is number of digits of n1-2's fraction.
int t;
int y=1; 
int fraction;
int integer;
if (n1digit>n2digit){
    t=n1digit;

}
else if (n2digit>n1digit){
    t=n2digit;
}
else { 
    t=n2digit;
}
fraction=f1+f2;
integer=n1+n2;

int temp=fraction;
int i=0; 
while (temp>0){
    temp=temp/10;
    i=i+1;
}
if (i>t){
    integer=integer+1; 
    y=pow(10,i-1);
    fraction=fraction%y;


}
printf("%d.%d\n",integer,fraction);
c floating-point int
3个回答
3
投票

以千为单位:输入数字为30053700,最后将结果除以1000.0


2
投票

有了您已张贴到@ruohola答案的提示,您可以执行以下操作:

  1. 定义最大小数位数,例如3或6
  2. 将数字读取为字符串,使用strtol()转换整数部分。然后跳过“。”
  3. [如果小数部分短于小数位数,则附加相应的数字'0',因此'70'变成'700'或'700000','5'变成'500'或'500000'
  4. 使用strtoul()将该数字存储到另一个(无符号)整数值中

现在您有了两个代表数字的整数值,其余可以完成


0
投票

为了使数字位数具有灵活性,并且不要求它们相同,阅读时,请用"%n"注意偏移量。

int o1, o2
printf("first number:");
// scanf("%d.%d",&n1.integer,&n1.fraction);
scanf("%d.%n%d%n",&n1.integer,&o1, &n1.fraction, &o2);
int n1digit = o2 - o1;

n2分母相同

将整数部分的符号应用于小数部分。 OP的代码不执行此操作。

[添加分数时,形成十的幂,然后添加分数。

注意:此方法在诸如"-1. 23", "1.-23", "12."等病理输入时失败。>

© www.soinside.com 2019 - 2024. All rights reserved.