【问题标题】:Printf outputting a bunch of zerosPrintf 输出一堆零
【发布时间】:2017-03-28 03:11:26
【问题描述】:

我是 C 的新手,所以如果这个问题的答案非常明显,我深表歉意!我的意思是遍历两个二维数组,将相应的索引成员作为参数传递给我的 chineseRemainder 例程,即对于每次迭代,array1[i] 和 array2[i] 应该传递给例程,其中 i = i。我期望调用 printf 的输出是一组数字——而不是我得到全零。这是我调用 CR 函数的主例程。 **edit 我给了 xp 和 xq 任意 int 值,因为它们似乎不是问题,并且给它们这样的值会得到相同的输出。

int main(){

int xp, xq, p = 61, q = 3;
int i, j;

reverseInteger();

for(i = 0; i < 32; ++i){
    for(j = 0; j < 10; ++j){
        xq = 4;
        xp = 1;
        printf("%i\n", chineseRemainder(xq, xp, p, q));
            }
        }


return 0;

}

为了排除故障,我转储了 xq 和 xp 的内容,以确保这些任务正在执行:它们是。问题一定出在 CR 例程上,因为即使我将任何一组整数传递给它,它也会打印零。因此,这是该函数及其依赖项:

float power(int base, int exp) {

int i;
float result = 1;

if (exp == 0)
    result = 1;

else if (exp == 1)
    result = base;

else if(exp > 1){
    for (i = 0; i < exp; ++i)
        result *= base;
}

else
    result = 1/power(base, -exp);

return result;

}

float powerMod(int q, int e, int p){

float result;

result = (int)power(q, e) % p;

return result;

}

typedef struct arrayInside{

        int array[30][10];

    } arrayInside;              

arrayInside codesInside;            

struct arrayInside reverseInteger(){

int i, j, number;

for(i = 0; i < 30; ++i){
    j = 10;
    number = (aryConversion(q3[i], 3));
    do {
        codesInside.array[i][j-1] = number % 10;
        --j;
        number = number / 10;
    }
    while (number);
    codesInside.array[i][0] = 0;

};

return codesInside;
}

int chineseRemainder(int xq, int xp, int p, int q){

int tp;
int ceiling = (p*q-1)/2;

tp = ((int)(q * (powerMod(q, -1, p))*xp + p * powerMod(p, -1, q) * xq) % (p*q));
    if(tp > ceiling)
            tp-=p*q;

return tp;

}

【问题讨论】:

  • 不是一个完整的例子。
  • 你知道 chineseRemainder() 是问题所在。因此,跟踪一些示例输入并尝试查看哪里出错了。
  • Antti,还有什么有用的?
  • 提供可运行并产生意外输出的最小示例。
  • 谢谢@merlin2011,我想我做到了,现在!

标签: c printf


【解决方案1】:

您的 chineseRemainder 实际上每次都返回 0。看看这个——

((int)(q * (powerMod(q, -1, p))*xp + p * powerMod(p, -1, q) * xq) % (p*q));

powerMod(q, -1, p) 为零。所以相乘和相加也会得到零。您的函数实际上返回零。没有任何错误。您可能需要检查逻辑或更改数据类型。

【讨论】:

    猜你喜欢
    • 2014-02-14
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 2012-02-28
    • 2018-01-10
    • 1970-01-01
    相关资源
    最近更新 更多