标题:这个题自己运行成功,OJ上显示运行错误,为什么?(运行期间执行了什么非法操 ...
只看楼主
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
结帖率:92%
已结贴  问题点数:20 回复次数:19 
这个题自己运行成功,OJ上显示运行错误,为什么?(运行期间执行了什么非法操作?)
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(void){
  int n,s[7]={0},i=0,k=0;
  scanf("%d",&n);
  while(n!=0){
  s[i++]=n%10;
  n=n/10;
}
  for(i=i-1;i+1;i--){
      if(s[i]!=0)
      k=k+pow(2,(double)(i));
  }
  printf("%d\n",k%(1000000000+7));
  return 0;
}
  
搜索更多相关主题的帖子: 运行 错误 非法 操作 include 
2018-05-09 14:31
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
得分:0 

忘了附题。。
2018-05-09 14:32
nosnoy
Rank: 9Rank: 9Rank: 9
来 自:mcu
等 级:贵宾
威 望:14
帖 子:540
专家分:1158
注 册:2016-9-17
得分:5 
回复 2楼 青蝶
为啥要进行k的替增 2^0+2^1+……+2^n=2^(n+1)-1;

穷举是最暴力的美学
2018-05-09 14:59
nosnoy
Rank: 9Rank: 9Rank: 9
来 自:mcu
等 级:贵宾
威 望:14
帖 子:540
专家分:1158
注 册:2016-9-17
得分:0 
#include <stdio.h>
#include <math.h>
void main()
{
    int n,i=0,flg,a;
    scanf("%d",&n);
    if(n%10==0)
        flg=1;
    else
        flg=0;
    while(n/=10,n!=0)
    {
        i++;
    }
    a=pow(2,i);
    if(flg)
    printf("%d",a);
    else
    printf("%d",a+1);
}

穷举是最暴力的美学
2018-05-09 15:09
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
得分:0 
回复 3楼 nosnoy
如果一个高位不为0,把它置零以后,剩下位数就可以是0或1,共有2^(剩下位数的个数)种情况,都是满足条件的;如果这个高位为0,就跳过去。这个算完以后,把那个高位置1,次高位当成原来的高位,同样算法循环。
2018-05-09 15:09
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
得分:0 
萌新一枚,可能想得不对
2018-05-09 15:14
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
得分:0 
回复 4楼 nosnoy
不是所有数位都可以取0或1,这样的数可能会超过n的值啊
2018-05-09 15:25
nosnoy
Rank: 9Rank: 9Rank: 9
来 自:mcu
等 级:贵宾
威 望:14
帖 子:540
专家分:1158
注 册:2016-9-17
得分:0 
回复 7楼 青蝶
假设输入的n值为 1005
n   i
1005 0
100   1
10    2
1      3
0        3
假设n为 1010
n    i
1010  0
101    1
10      2
1        3
0        3

穷举是最暴力的美学
2018-05-09 15:32
nosnoy
Rank: 9Rank: 9Rank: 9
来 自:mcu
等 级:贵宾
威 望:14
帖 子:540
专家分:1158
注 册:2016-9-17
得分:0 
回复 7楼 青蝶
刚没想到 1010的情况
现修改如下
#include <stdio.h>
#include <math.h>
void main()
{
    int n,i=0,flg=0,a;
    scanf("%d",&n);
    while(n/=10,n!=0)
    {
        i++;
    if(n%10!=0)
        flg=1;
    }
    a=pow(2,i);
    if(flg)
    printf("%d",a+1);
    else
    printf("%d",a);
}

穷举是最暴力的美学
2018-05-09 15:40
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
得分:0 
回复 8楼 nosnoy
假设输入的n值为 111
n   i
111 0
11   1
1    2
0    2
最后输出a的值为2^2+1=5,
但是满足条件的数有: 1,10,11,100,101,110,111,一共7个。
2018-05-09 15:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-486793-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052457 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved