为什么这个程序用C++在OJ上提交显示编译错误,用C提交就过了?
题目描述任何一个正整数都可以用 2 的幂次方表示。例如
137=27+23+20137=2^7+2^3+2^0
同时约定方次用括号来表示,即
a^b可表示为 a(b) 。
由此可知,137 可表示为:
2(7)+2(3)+2(0)
进一步:
7=2(2)+2+2(0)(2^1用2表示),并且3=2+2(0)。
所以最后 137 可表示为:
2(2(2)+2+2(0))+2(2+2(0))+2(0)
输入输出格式
输入格式:
一个正整数 n(n≤20000) 。
输出格式:
符合约定的 n 的 0,2 表示(在表示中不能有空格)
输入输出样例
输入样例#1:
1315
输出样例#1:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
int index=0,a[1000][100];
int calculate(int x){
int i,j=0,s=0,t,k;
index++;
while(s!=x){
t=1;
k=0;
while(s+t<=x){
t=t*2;
k++;
}
s+=t/2;
a[index][j++]=k-1;
}
return index;
}
void output2(int number){
int i=0,k;
printf("2(");
while(a[number][i]!=-1){
if(i>0) printf("+");
if(a[number][i]!=0 && a[number][i]!=1 && a[number][i]!=2){
k=calculate(a[number][i]);
output2(k);
}
else{
if(a[number][i]==1) printf("2");
else printf("2(%d)",a[number][i]);
}
i++;
}
printf(")");
}
void output1(int number){
int i=0,k;
while(a[number][i]!=-1){
if(i>0) printf("+");
if(a[number][i]!=0 && a[number][i]!=1 && a[number][i]!=2){
k=calculate(a[number][i]);
output2(k);
}
else{
if(a[number][i]==1) printf("2");
else printf("2(%d)",a[number][i]);
}
i++;
}
}
int main(void){
int n,k,i,j;
scanf("%d",&n);
for(i=0;i<1000;i++){
for(j=0;j<100;j++){
a[i][j]=-1;
}
}
k=calculate(n);
output1(k);
printf("\n");
return 0;
}
用C++提交显示编译错误:
编译信息
编译失败
/tmp/tmpI0bRlB.cpp:10:5: error: 'int index' redeclared as different kind of symbol
int index=0,a[1000][100];
^
In file included from /tmp/runtime/include/c++/4.9.4/cstring:42:0,
from /tmp/tmpI0bRlB.cpp:4:
/tmp/runtime/include/string.h:467:20: note: previous declaration 'const char* index(const char*, int)'
extern const char *index (const char *__s, int __c)
^
/tmp/tmpI0bRlB.cpp: In function 'int calculate(int)':
/tmp/tmpI0bRlB.cpp:14:7: error: no post-increment operator for type
index++;
^
/tmp/tmpI0bRlB.cpp:23:10: error: invalid types 'int [1000][100][<unresolved overloaded function type>]' for array subscript
a[index][j++]=k-1;
^
/tmp/tmpI0bRlB.cpp:25:9: error: cannot resolve overloaded function 'index' based on conversion to type 'int'
return index;
^