求助一道很水的C++题。。。
真的挺水的,但就是找不到错误。。。 原题及代码如下
/*有一种数制的基数是3,权值可以取-1,0,1,并分别用符号-,0,1表示,如这种数制的101表示十进制数的10,
即1*(3^2)+0*(3^1)+1*(3^0)=10,又如这种数制的-0 表示十进制数的-3,即-1*(3^1)+0*(3^0)=-3。
编程要求把给定的有符号整数转换为新数制的数,该数的前面不能有多余的0,如10的新数制表示是101,则不要输出成0101。
输入格式
文件有一行或多行,每行有一个整数N (-2,147,483,647≤N≤2,147,483,647),整数内不会有其他分隔符。
输出格式
对输入文件的每一行输出一行,该行是输入行的整数的新数制表示,不能有多余空行,每行之前不能有前导空格。
样例输入
将样例输入复制到剪贴板
10
-3
样例输出
101
-0
*/
#include<stdio.h>
#include<vector>
#include<memory.h>
using namespace std;
vector<char> vec;
int i=0;
int N=0;
int t=0;
int j=0;
void solve(int a)
{
if(a==1)
{
vec.push_back('1');
return;
}
else if(a==-1)
{
vec.push_back('-');
return;
}
else if(a==0)
{
vec.push_back('0');
return;
}
else if(a>1)
{
for( i=0; ;i++)
{
if(a<=(3^(i+1)))
{
break;
}
}
if((3^(i+1))-a<a)
{
vec.push_back('1');
for(t=0; ;t++)
{
if((a-(3^(i+1)))+(3^(t+1))>=0)
{
break;
}
}
for(j=0;j<i-t;j++)
{
vec.push_back('0');
}
solve(a-(3^(i+1)));
}
else
{
vec.push_back('1');
for(t=0; ;t++)
{
if((a-(3^i))<=(3^(t+1)))
{
break;
}
}
for(j=0;j<i-t-1;j++)
{
vec.push_back('0');
}
solve(a-(3^i));
}
}
else
{
for( i=0; ;i++)
{
if(a+(3^(i+1))>=0)
{
break;
}
}
if((-3^(i+1))-a>a)
{
vec.push_back('-');
for(t=0; ;t++)
{
if(((3^(i+1))+a)-(3^(t+1))<=0)
{
break;
}
}
for(j=0;j<i-t;j++)
{
vec.push_back('0');
}
solve((3^(i+1))+a);
}
else
{
vec.push_back('-');
for(t=0; ;t++)
{
if((3^(t+1))+((3^(i))+a)>=0)
{
break;
}
}
for(j=0;j<i-t-1;j++)
{
vec.push_back('0');
}
solve((3^(i))+a);
}
}
}
int main()
{
// memset(vec,'0',sizeof(vec));
scanf("%d",&N);
solve(N);
for(i=0;i<vec.size();i++)
{
printf("%c",vec[i]);
}
printf("\n");
return 0;
}
我的代码运行的结果是
>>10
10000000-
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。