浮点数与整数的减法

P5705 【深基2.例7】数字反转

HarryZhang @ 2020-08-12 22:08:08

#include<iostream>
#include<math.h>
using namespace std;
int main()
{
    float a,yx,xx,b;
    int yz,xz,h,t,o;
    cin>>a;
    yz=floor(a);
    yx=a-yz;
    xz=yx*10;
    h=yz/100;
    t=(yz%100)/10;
    o=yz%10;
    xx=(h/1000.0)+(t/100.0)+(o/10.0);
    b=xz+xx;
    cout<<a<<" "<<yz<<" "<<yx<<" "<<b;
    return 0;
}

本题使用以上算法时,部分情况答案正确。但当输入的a值为888.8时,输出的a,yz(原整数部分),yx(原小数部分),b(答案)却依次为888.8,888,0.799988,7.888。据此推测是“yx=a-yz”这一行出了问题。请问这是由于a(float)与yz(int)的数据类型不同吗?有解决方法吗?


by LucasXu80 @ 2020-08-12 22:09:40

啊这,这题正解是字符串反转啊(


by WanderingTrader @ 2020-08-12 22:14:41

@HarryZhang

  1. 浮点数±整数=浮点数
  2. 浮点数请用double
  3. 此题正解是字符串反转

by Terrible @ 2020-08-12 22:26:20

#include<cstdio>
int main()
{
    char c[10],i=-1;
    while((c[++i]=getchar())>32);
    for(i--;i>=0;i--)putchar(c[i]);
}

有那么麻烦吗?- -


by BigBen2020 @ 2020-08-12 22:35:46

#include<cstdio>
using namespace std;
int main(){
    int a,b,c,d;
    scanf("%1d%1d%1d.%1d",&a,&b,&c,&d);
    printf("%d.%d%d%d",d,c,b,a);
    return 0;
}

一位位来就OK了


by 123456zmy @ 2020-08-13 08:15:33

#include<stdio.h>
int main(){char c=getchar();if(c>13)main(),putchar(c);}

by HarryZhang @ 2020-08-13 11:30:22

非常感谢各位的回答


|