我的代码在一个测试用例中失败了。我做错了吗?

时间:2017-05-24 05:09:13

标签: c

创建一个允许人们了解指数的代码。 任务是编写一个代码,该代码以整数作为输入,并返回从2(2)上升到幂0(零)到2(2)上升到幂n(输入中指定的数字)的值

输入

输入包含数字'n',所有值从2的幂从0返回到n。

输出

输出包含从2(两个)上升到功率0(零)到2(两个)上升到功率n(输入)的值,用逗号分隔。

约束

-1000≤n≤1000

示例输入

5

示例输出

1,2,4,8,16,32

#include <stdio.h>
int main(void){
   int n;double p=1;
   scanf("%d",&n);
   if(n>0){
      for(int i=0;i<n;i++,p*=2)
          printf("%.0lf,",p);
      printf("%.0lf",p);
   }
   else if(n==0) 
       printf("1");
   return 0;
}

4 个答案:

答案 0 :(得分:1)

你应该注意'n'的负值。

答案 1 :(得分:1)

未处理的负面案件

#include <stdio.h>

int main(void){
     int n,p=1;
     scanf("%d",&n);
     if(n>0){
        for(int i=0;i<n;i++,p*=2)
            printf("%d,",p);
        printf("%d",p);
     }
     else if(n==0) printf("1");
     else{
        for(int i=n;i<0;i--,p*=2)
            printf("-%d,",p);
        printf("-%d",p);
        }
    return 0;
 }

答案 2 :(得分:0)

对于N <0,格式说明符应该允许小数点,因为所有数字都在0和1之间。因此,对于N <0,使用double作为数据类型。 对于N> 0,使用长long数据类型,因为所有数字都是整数。

#include <stdio.h>

int 
main(void)
{
   int n;
   double p=1.0;
   long long llp = 1;

   scanf("%d",&n);

   if(n>0){
       for(int i=0;i<=n;i++){
          printf("%lld",llp);
          if( i<n) printf(",");
          llp*=2;
       }
   } else if(n<0){
        for(int i=n;i<=0;i++){
           printf("%.5lf",p);
           if( i<0) printf(",");
           p*=0.5;
        } 
   }else
       printf("1");

   return 0;
}

答案 3 :(得分:-3)

#include <stdio.h> 
int main(void){ 
int n;
double p=1; 
scanf("%d",&n); 
if(n>0){ 
for(int i=0;i<n;i++,p*=2) 
printf("%.0lf,",p); 
printf("%.0lf",p); 
} else if(n==0) printf("1"); 
else {
for (int i=0; i>n; i--, p/=2)
printf("%.0lf,",p); 
printf("%.0lf",p); 
}
return 0;
}