Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Homework 将算法从Python转换为C:在C中使用bin()的建议?_Homework_C_Python_Binary - Fatal编程技术网

Homework 将算法从Python转换为C:在C中使用bin()的建议?

Homework 将算法从Python转换为C:在C中使用bin()的建议?,homework,c,python,binary,Homework,C,Python,Binary,因此,从本质上说,我有一个问题要写,而不是采取简单的路线,我想我会实现一个小算法和一些编码实践来打动我的教授。问题是帮助我们选择C(或者回顾一下,前者对我来说),问题告诉我们返回所有除以给定整数的整数(这样就没有余数) 我在中所做的是创建了一个is\u prime()方法、一个池\u primes()方法和一个组合()方法。到目前为止,我已经用C完成了所有的工作,直到combinations()方法。我现在遇到的问题是一些语法错误(即不能通过声明更改字符串),主要是我用于组合列表中的内容的语法错

因此,从本质上说,我有一个问题要写,而不是采取简单的路线,我想我会实现一个小算法和一些编码实践来打动我的教授。问题是帮助我们选择C(或者回顾一下,前者对我来说),问题告诉我们返回所有除以给定整数的整数(这样就没有余数)

我在中所做的是创建了一个is\u prime()方法、一个池\u primes()方法和一个组合()方法。到目前为止,我已经用C完成了所有的工作,直到combinations()方法。我现在遇到的问题是一些语法错误(即不能通过声明更改字符串),主要是我用于组合列表中的内容的语法错误。但是,如果不能通过声明来更改我的字符串,Python代码就有点崩溃了

代码如下:

抱歉,如果整个代码太长或没有针对特定的套装进行优化。但它起作用了,而且效果很好:)

同样,我现在拥有aList将拥有的一切,存储为一个单链表(我可以打印/使用)。我还有一个包含在C中的小宏,用于将二进制转换为整数:

#define B(x) S_to_binary_(#x)
static inline unsigned long long S_to_binary_(const char *s)
{
    unsigned long long i = 0;
    while (*s) {
        i <<= 1;
        i += *s++ - '0';
    }
    return i;
}
#将B(x)S_定义为_二进制(#x)
静态内联无符号长序列到二进制序列(常量字符*S)
{
无符号长i=0;
而(*s){

我为什么要使用字符串?保持简单:使用整数,并使用位数学处理数字。这样你就不必来回进行任何转换。加载速度也会更快

您可以使用
uint32\u t
来存储“位”,这足以容纳32位(因为您的最大输出为21位,这应该非常有效)

例如,您可以使用如下循环来循环设置的位:

uint32_t my_number = ...;

for(int i=0; i<32; i++) {
    if(my_number & (1<<i)) {
        /* bit i is set */
    }
}
uint32\t我的号码=。。。;

对于(int i=0;我喜欢你试图为你的问题提供好的背景,并且在提问之前“做了功课”。然而,我发现你的问题几乎难以回答。信息“到处都是”。我想知道你是否能“提炼”这个问题更进一步,问一个更有针对性的问题,没有多余的信息。当你这样做时,我永远不会让一个名为“S_to_binary_”的函数返回一个int。它实际上是“binary_string_to_int”@GreenAsJade对此我深表歉意……我一开始总是尽量提供尽可能多的细节,只是因为有些人在没有足够的信息时会变得非常激进。你认为什么是重要的?我很乐意编辑出来!@T.Woody我总是发现预期输入和预期输出的示例非常有用。目前,我们可以看看你在哪里,但不是你想去的地方。呵呵,你赢不了:)看起来你现在有了一个指针,在一个答案中,关于如何继续,所以你可能不需要费心清理。混合基数的事情在Python中很容易做到。我想在C中会有点乏味,但这是我所知道的最有效的算法。当我第一次想到它时,我很高兴。:)我刚刚快速地看了一下你的Cgithub上的代码。我稍后会仔细查看,但我刚刚注意到您在第141-152行上有一个缩进错误。没错,这在C中并不重要,但保持整洁很好。:)我唯一看到的其他时间是在本周的编译器构造课程中。我会看看Google提供了什么!您对这个实现有什么建议吗这是你的作业,不是我的。我给了你一些关于继续的方向的建议。Touche。我没有看到前面列出的示例。这应该足够了!@t.Woody:没有,但我提供了一个如何用位操作替换一个循环的示例。还有一些代码需要在外部实现当然,但是如果你能把注意力集中在按位操作上,你会发现你实际上可以非常简洁地编写代码。
uint32_t my_number = ...;

for(int i=0; i<32; i++) {
    if(my_number & (1<<i)) {
        /* bit i is set */
    }
}