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

Is it possible to add 3.005 to 4.70 only using int types in C?

我被要求输入两个数字,例如 3.005、3.70,并在不使用 float 或 double 的情况下对它们进行加、减和乘。不知何故,我设法做了一些类似于我被问到的事情。我单独输入数字。如果我输入“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);

以千为单位输入数字30053700,最后除以1000.0

根据您在@ruohola 的回答中发布的提示,您可以执行以下操作:

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

现在你有两个整数值,代表可以完成剩下的事情

为了允许数字的灵活性而不要求它们相同,阅读时请注意偏移量 "%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 的代码不会这样做。

分数相加时先求10的次方,然后分数相加。

注意:此方法因 "-1. 23", "1.-23", "12." 等病态输入而失败