我被要求输入两个数字,例如 3.005、3.70,然后在不使用 float 或 double 的情况下对它们进行加、减和乘。不知何故,我设法做了一些类似于我被问到的事情。我单独输入数字。如果我输入“3.005”,我首先输入 3,然后我输入 .005。但是由于 005 不等于 0.005 我遇到了问题。例如,我输入 3.005 和 4.70,当我添加它们时,我得到 7.75,这是不正确的。我该如何解决?这就是我输入值(value)观的方式。

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); 

请您参考如下方法:

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

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

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


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!