我被要求输入两个数字,例如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);
以千为单位:输入数字为3005
和3700
,最后将结果除以1000.0
。
有了您已张贴到@ruohola答案的提示,您可以执行以下操作:
strtol()
转换整数部分。然后跳过“。” 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的代码不执行此操作。
[添加分数时,形成十的幂,然后添加分数。
注意:此方法在诸如"-1. 23", "1.-23", "12."
等病理输入时失败。>