求助一道很水的C++题。。。

vincentandyun 2011-07-18 04:32:16
真的挺水的,但就是找不到错误。。。 原题及代码如下



/*有一种数制的基数是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-
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
...全文
240 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
vincentandyun 2011-07-18
  • 打赏
  • 举报
回复
额,是搞错了,真汗,谢谢了。。。。。。
autumn1202 2011-07-18
  • 打赏
  • 举报
回复
3^(t+1)这个是求什么? ^是异或运算符,lz搞错了吧,乘方应该用pow(3, t+1)
pathuang68 2011-07-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 babilife 的回复:]

这种问题,只能单步跟踪了,没啥水不水的。。
[/Quote]

++,同意。
至善者善之敌 2011-07-18
  • 打赏
  • 举报
回复
这种问题,只能单步跟踪了,没啥水不水的。。

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧