学校的这道oj题为什么通过不了

揽星辰. 2021-02-09 12:04:58


以下是我代码:

#include <stdio.h>
#include <math.h>
int main()
{
unsigned int x,n;
int i,y;
char s[50];
scanf("%u",&x);
i=0;
while(x>0)
{
s[i++]=x%2+'0';
x=x/2;
}
s[i]='\0';
y=i-1;
for(i=y;i>=0;i--) if((i+1)%2==0) s[i]='0';
for(i=y,n=0;i>=0;i--) n+=pow(2.0,y-i)*(s[i]-'0');
printf("%u\n",n);
return 0;
}

...全文
139 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-06
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
自信男孩 2021-02-09
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <math.h>

unsigned int get_odd_bit(unsigned int n, int bit_len);
int main()
{
#if 0
unsigned int x,n;
int i,y;
char s[50];
scanf("%u",&x);
i=0;
while(x>0)
{
s[i++] = x%2 +'0';
x=x/2;
}
s[i]='\0';
puts(s);
y = i-1;
for(i=y;i>=0;i--) if((i+1)%2==0) s[i]='0';
puts(s);
for(i=y,n=0;i>=0;i--) n+=pow(2.0,y-i)*(s[i]-'0');
printf("%u\n",n);
#else
unsigned int x;

scanf("%u", &x);

x = get_odd_bit(x, 32);

printf("%u\n", x);
#endif
return 0;
}


unsigned int get_odd_bit(unsigned int n, int bit_len)
{
unsigned int s = 0;
int i;

for (i = 0; i < bit_len; i++) {
if (i % 2)
s += ((n >> i) & 1u) ? (1u << i) : 0;
}

return s;
}

供参考
楼主的代码是没问题的,但是不符合题目要求。因为题目要求自定义函数实现,楼主把逻辑都写在main函数里。
建议楼主把自己的逻辑用一个自定义函数来实现试试。以上是自己用自定义函数来实现的,参考一下
qybao 2021-02-09
  • 打赏
  • 举报
回复
需要这么复杂吗? 用&运算就好了呀?二进制1010就是16进制a 所以 y = x & 0xaaaaaaaa 就可以了

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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