| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 397 人关注过本帖
标题:拿到了关于我前几天发的关于2进制无限循环的正解,让大家看看
只看楼主 加入收藏
ccapp
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2009-10-23
结帖率:33.33%
收藏
 问题点数:0 回复次数:1 
拿到了关于我前几天发的关于2进制无限循环的正解,让大家看看
~~~~~~
花了3天时间还是解不出来~求高手指教

要求是:
Abit 和Bbit是2种2进制数,Abit的值根据输入的变量a,从无限循环的1010101010...中取前a个数作为Abit的值。比如当 a=3,Abit=101;a=4,Abit=1010;a= 7, Abit= 1010101。   Bbit 的值根据输入的变量b,所有b位数的 2进制数都是Bbit的制。  程序的要求是根据输入的a和b,显示出所有含有Abit的Bbit的值,按照由小到大的顺序。不能在程序中使用 string,array 和 recursion。b 的取值从1到31,所以Bbit最大可以有31位数;a的取值小于等于b
下面是一个程序运行情况的sample:
please enter b:
5
please enter a:
3
the results are:
00101
01010
01011
01101
10100
10101
10110
10111
11010
11011
11101
~~~~~~~~~~~~~~~~~~~~~~~~~
大家都用了很多稍微复杂的编程,看到正解以后发现居然都是最简单的loop,和大家分享下

#include <stdio.h>
#include <math.h>
#include <stdbool.h>
/* Determine whether the i'th bit in a number
 * is a 0 or a 1.  Return true if the bit is a 1. */
bool getIthBit (int val, int i)
{
  val /= (int)pow(2, i);
  return (val % 2);
}
/* Print off an integer in binary.
 * n is the number of bits to print.
 */
void printValue (int n, int val)
{
  int i;
  for (i = n-1; i >= 0; i--)
  {
    if (getIthBit(val,i) == true)
      printf("1");
    else
      printf("0");
  }
  printf("\n");
}
/* Determine if the parameter val contains
 * the m-bit pattern.
 */
bool isQualified (int n, int val, int m)
{
  int i, j;
  int count;
  bool found;
  for (i = n-1; i >= (m-1); i--) {
    found = true;
    // walk along and look at m bits
    for (j = i, count = 0; (count < m) && found; j--, count++)
    {
      if (count % 2 == 0)
      { // looking for a 1 in the m-bit pattern
    if (getIthBit(val, j) == 0)
      found = false;
      }
      else
      { // looking for a 0 in the m-bit pattern
    if (getIthBit(val, j))
      found = false;
      }
    }
   
    if (found) return true;
  }
  return false;
}

int main (void)
{

  int i;
  int n, m;
  printf("Enter an integer n:\n");
  scanf("%d", &n);
  printf("Enter an integer m:\n");
  scanf("%d", &m);
  int limit = pow(2,n);
  for (i = 0; i < limit; i++)
  {
    if (isQualified(n, i, m))
      printValue(n,i);   
  }
  return 0;
}
搜索更多相关主题的帖子: 进制 
2009-10-27 09:41
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
也是筛选法,但这程序要是放在int整型为2字节的编译器上,运行大于15的数就不会出结果。如int整型是4字节,输入大点的数,运行速度也应该慢吧。(我没VC测)

努力—前进—变老—退休—入土
2009-10-27 12:17
快速回复:拿到了关于我前几天发的关于2进制无限循环的正解,让大家看看
数据加载中...
 
   



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

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