P1307 70分求解

P1307 [NOIP2011 普及组] 数字反转

TaamZeonhei @ 2021-06-07 08:36:36

为什么测试点1,5,8不过?在编译器测试的答案和题目的答案一模一样啊!?!救救孩子!!!

#include<iostream>
#include<string>
using namespace std;
int main()
{
    int ii=10;
    int j=0;//判断值为“假”
    string num;
    cin>>num;
    if(num[0]==48) cout<<0<<endl;//"0"
    else
    {
        if(num[0]=='-')//负数
        {
            cout<<'-';
            for(int i=1;i<=10;i++)
            {
                if((num[ii]!=48&&j==0)&&num[ii]!=0)
                {
                    cout<<num[ii];
                    j=1;//遇到倒数第一位非负数字后判断值为“真”
                }
                else if(j==1) cout<<num[ii];
                ii=ii-1;
            }
        }
        else//正数
        {
            for(int i=0;i<=10;i++)
            {
                if((num[ii]!=48&&j==0)&&num[ii]!=0)
                {
                    cout<<num[ii];
                    j=1;//遇到倒数第一位非负数字后判断值为“真”
                }
                else if(j==1) cout<<num[ii];
                ii=ii-1;
            }
        }
    }

    return 0;
 }

by metaphysis @ 2021-06-07 09:24:43

@TaamZeonhei

您使用:

int ii=10;

如果给定的输入长度不足10位,那么在引用 num[ii] 时,其值是不确定的,因为已经超出读入数据的范围,这样会导致出现未定义行为(undefined behavior),使得结果出现错误。


by metaphysis @ 2021-06-07 09:28:27

@TaamZeonhei

#include<iostream>
#include<string>
using namespace std;
int main()
{
    int ii=10;
    int j=0;//判断值为“假”
    string num;
    cin>>num;
    if(num[0]==48) cout<<0<<endl;//"0"
    else
    {
        int end = 0;
        if(num[0]=='-') { cout<<'-'; end = 1; }
        for (int i = num.length() - 1; i >= end; i--)
        {
            if (num[i] == '0') continue;
            for (int j = i; j >= end; j--)
                cout << num[j];
            break;
        }
    }

    return 0;
 }

by TaamZeonhei @ 2021-06-07 12:19:07

@metaphysis 谢谢大佬。可是输入-290输出-92这组数据我用原来的代码在电脑上运行是没错的,到了题目判断就WA了,这是为什么?


by metaphysis @ 2021-06-07 15:00:58

我在洛谷IDE上测试输入-290时会输出乱码。


by _Cppsteve_ @ 2021-07-15 16:51:24

我的思路如下:把它的各位用模运算提取出来,然后加入另一个变量中,但是那个变量要提前乘以10

附上源码

#include <iostream>

using namespace std;
int main()
{
    int a;
    cin>>a;
    int b=0;
    while(a!=0){
        b=b*10+a%10;
        a/=10;
    }
    cout<<b<<endl;
    return 0;
}

|