C Printf输出一组零
我是C语言的新手,如果答案显而易见,我很抱歉!我的意思是循环两个2D数组,将相应的索引成员作为参数传递给我的chineseRemainder例程,也就是说,对于每次迭代,array1[I]和array2[I]应该传递给例程,其中I=I。我希望printf调用的输出是一组特定的数字,而不是全部为零。这里是主例程,我在这里调用CR函数**编辑我给了xp和xq任意的int值,因为它们似乎不是问题所在,给它们这样的值会得到相同的输出C Printf输出一组零,c,printf,C,Printf,我是C语言的新手,如果答案显而易见,我很抱歉!我的意思是循环两个2D数组,将相应的索引成员作为参数传递给我的chineseRemainder例程,也就是说,对于每次迭代,array1[I]和array2[I]应该传递给例程,其中I=I。我希望printf调用的输出是一组特定的数字,而不是全部为零。这里是主例程,我在这里调用CR函数**编辑我给了xp和xq任意的int值,因为它们似乎不是问题所在,给它们这样的值会得到相同的输出 int main(){ int xp, xq, p = 61, q
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实际上每次都返回0。看看这个-
((int)(q * (powerMod(q, -1, p))*xp + p * powerMod(p, -1, q) * xq) % (p*q));
powerModq,-1,p为零。所以乘和加起来也会得到零。您的函数实际上返回零。没有什么不对的。您可能需要检查逻辑或更改数据类型。这不是一个完整的示例。您知道ChineserInder是问题所在。因此,追踪一些示例输入,并尝试看看哪里出了问题。Antti,还有什么更有用的吗?提供可运行的最小示例,并产生意外的输出。谢谢@merlin2011,我想我现在已经做到了!