求问 为啥输入n*10类数字无法输出

P1307 [NOIP2011 普及组] 数字反转

朱景瑜大人 @ 2017-11-09 22:28:47

找了一天都找不到问题出在哪里QAQ 求大佬帮看看 非常感谢

#include<iostream>
using namespace std;
int main()
{
    int n,i=1,j;
    int a[1000];
    cin>>n;
    if(n<0)
    {
        n=-n;
        do{
            a[i]=n%10;
            n=n/10;
            i++;
        }while(n>0);
        cout<<"-";
        if(a[1]!=0) cout<<a[1];
        for(j=2;j<=i-1;j++)
        {
             cout<<a[j];
        }
    }
    else {
            do{
            a[i]=n%10;
            n=n/10;
            i++;
              }while(n>0);
            if(a[1]!=0) cout<<a[1];
            for(j=2;j<=i-1;j++)
            {
             cout<<a[j];
            }
        }
        return 0;
}

by Kanade @ 2017-11-09 23:32:12

如果n后面有多个0的话,你的判断就是错误的。

因为不止a[1]是0

正确的写法应该像这样

int pos=1;
while(a[pos]==0&&pos<i-1) pos++;
int pos=1;
while(a[pos]==0) pos++;
for(int j=pos;j<=i-1;j++) {
    printf("%d",a[j]);
}

修改后的代码如下

已AC

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,i=1,j;
    int a[1000];
    cin>>n;
    if(n<0)
    {
        n=-n;
        do{
            a[i]=n%10;
            n=n/10;
            i++;
        }while(n>0);
        cout<<"-";
        int pos=1;
        while(a[pos]==0&&pos<i-1) pos++;
        for(int j=pos;j<=i-1;j++) {
            printf("%d",a[j]);
        }
    }
    else {
            do{
            a[i]=n%10;
            n=n/10;
            i++;
              }while(n>0);
            int pos=1;
            while(a[pos]==0&&pos<i-1) pos++;
            for(int j=pos;j<=i-1;j++) {
                printf("%d",a[j]);
            }        }
        return 0;
}

by Kanade @ 2017-11-09 23:33:32

好像打重了

第一个代码长这样

int pos=1;
while(a[pos]==0&&pos<i-1) pos++;
for(int j=pos;j<=i-1;j++) {
    printf("%d",a[j]);
}

by user48442 @ 2017-11-10 07:13:25

因为你需要一个while来解决掉转换后开头的所有零

while(!(n % 10)){

    n /= 10;

}

n是处理负数之后的(也就是n<0,n=-n)


by 无欢 @ 2017-11-19 16:44:27

唉。。太复杂

十五行代码

#include<stdio.h>
int main()
{
        int n;
        scanf("%d",&n);
    int j,x=0;
        do
        {
           j=n%10;
           n=n/10;
           x=x*10+j*10;
        }while(n!=0);
        printf("%d",x/10);
        return 0;
}

对,就这么简单。。


|