问题标题: 酷町堂:1005题 倒序输出找错误

0
0
已解决
郑怡翔
郑怡翔
初级天翼
初级天翼

80分代码:(找错或说思路)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int main()
{
    int a;
    cin>>a;
    int i=1;
    int wei[100],j=0;
    while(a!=0)
    {
        wei[i]=a%10;
        a/=10;
        if(wei[0]==0)
        {
            cout<<wei[i];
        }

    }

    return 0;
}

 


2
已采纳
方亦欧
方亦欧
新手光能
新手光能
if(wei[0]==0)
{
    cout<<wei[i];
}

你的这一句话是想判断首位是否为0,然而却是错误百出。

首先,你的数组是从1开始的,wei[0]是个随机数,你拿它判断当然不对。

其次,撇开上面的因素,你的逻辑上也有问题,你判断数组第一个元素是否为0,但是这样是有问题的,你想,如果第一个元素等于0,你才输出,否则你就不输出。这样的话,如果第一个元素不为0(这种情况占大多数),你将会什么都不输出,自然不符合题意。你之所以能拿到80分,还是托了wei[0]是随机数的福,如果你从0开始,你一分都没有。不信你把第十行的int i=1改成i=0试试。

这一步,你这样判断太简单了,应该要第一个元素不是0或者i!=1才能输出,你把它搞反了。

应该这样写:

 if(wei[i]!=0 || i!=1)
 {
     cout<<wei[i];
 }

便于理解,也可以这样写:

 if(!(wei[i]==0 && i==1))
 {
     cout<<wei[i];
 }

就是两个条件都不满足才输出,否则就不输出。

另外,你的思路也非常不好,应该用一个变量,将每次取出的最后一位组合成一个数。

 while(n!=0)
 {
    a=a*10+n%10;
    n/=10;
 }

这个思路应该不难理解,如果不行的话,老师也应该讲过。

望采纳!

0
杨陈卓
杨陈卓
新手天翼
新手天翼

我是用do while做的

定义整型变量n,s=0;

输入n

    if(n<0)printf("-");
    n=abs(n);
    do
    {
        s=s*10+n%10;
        n/=10;
    }while(n!=0);
    printf("%d\n",s); 

核心代码

头文件

#include<iostream>
#include<cstdio>
#include<cmath>

 

0
王子轩
王子轩
新手光能
新手光能

 

if(n<0)printf("-");

 

n=abs(n);

 

do

 

{

 

s=s*10+n%10;

 

n/=10;

 

}while(n!=0);

 

printf("%d\n",s);

0
我要回答