求助 用for循环怎么通过这道题

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

Poppet @ 2022-10-09 20:04:26

本人列举的数据为整数部分相同 ,小数部分从1至9的数据

问题出在第三个for循环

如下代码只能通过小数部分是奇数(除0)的数据

#include<stdio.h>
int main()
{   
    int b,c,d,e=0;
    double a;
    scanf("%lf",&a);
    for(b=0;a>=100;a=a-100.0){
    b++;
    }
    for(c=0;a>=10;a=a-10.0){
        c++;
    }
    for(d=0;a>=1;a=a-1.0){
        d++;
    }
    **for(e=0;a>=0.1;a=a-0.1){
        e++;
    }**
    printf("%d.%d%d%d",e,d,c,b);
    return 0;
}

如下代码可通过的数据和上述代码完全相反(除0)

#include<stdio.h>
int main()
{   
    int b,c,d,e=0;
    double a;
    scanf("%lf",&a);
    for(b=0;a>=100;a=a-100.0){
    b++;
    }
    for(c=0;a>=10;a=a-10.0){
        c++;
    }
    for(d=0;a>=1;a=a-1.0){
        d++;
    }
    **for(e=0;a>0.0;a=a-0.1){
        e++;
    }**
    printf("%d.%d%d%d",e,d,c,b);
    return 0;
} 

小数部分为零的数据均可通过

调试过程中出现计算小数部分为0.1,实则计算机运算为0.0999999999999的现象 求助这种问题如何解决

求助 for循环无法通过这道题吗


by HeCao2008 @ 2022-10-09 20:06:59

作为误差来计算,我一般用与目标数据差 0.000001 来写


by HeCao2008 @ 2022-10-09 20:07:35

说真的,这道题你真的不打算直接模拟吗/哭笑


by ud2_ @ 2022-10-09 20:08:44

乘 10 之后当整数算。


by Poppet @ 2022-10-09 20:14:55

@ud2_ 谢谢


by Poppet @ 2022-10-09 20:17:27

@HeCao2008 谢谢你,但是我目前并不了解模拟是什么意思,搜索到的是模拟算法,我会去学习一下。


by HeCao2008 @ 2022-10-09 20:21:19

@Poppet 额,我直接告诉你吧


by Ayano_Kimishima @ 2022-10-09 20:25:31

#include<stdio.h>
#include<string.h>
using namespace std;
char a[1000000];
int main()
{
    cin>>a;
    int lena=strlen(a);
    for(int i=lena-1;i>=0;i--)
    {
        cout<<a[i];
    }
    return 0;
}

字符串可以AC


by ud2_ @ 2022-10-09 20:44:22

@Poppet

我目前并不了解模拟是什么意思

这题的要求是“输入……翻转……并输出”,改写成 C++ 就是这样:

#include <algorithm>
#include <iostream>
#include <string>

int main() {
  std::string s;
  std::cin >> s; // 输入
  std::reverse(s.begin(), s.end()); // 翻转
  std::cout << s << '\n'; // 输出
  return 0;
}

像这样直接把题目要求改写成代码就是模拟。


by Sora1336 @ 2022-10-09 20:44:38

@Poppet 模拟不是算法

模拟是题目让你做什么就做什么

模拟退火是算法


by Poppet @ 2022-10-09 20:48:18

@Sora1336 谢谢


| 下一页