下面的代码运行得很完美.给出正确的输出但是,当我将变量的符号从signed更改为unsigned时,程序会运行到无限循环中.该程序是找到整数的阶乘.在我知道unsigned int的模块化行为的任何地方,任何变量的值都不会消极.
#include<stdio.h>
int main(void)
{
int a[200], i,index, number, next, count, temp, test, x;
scanf(" %d", &test);
while(test--)
{
scanf(" %d", &number);
a[0]=1;
count=1; //1 digit
for(next=2;next<=number;++next)
{
index=0;temp=0;
for(i=0;i<count;++i)
{
x=a[index]*next+temp;
a[index]=x%10;
temp=x/10;
++index;
}
while(temp!=0)
{
a[count++]=temp%10;
temp=temp/10;
}
}
for(i=count-1;i>=0;--i)
printf("%d",a[i]);
printf("\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
问题是,
for(i=count-1;i>=0;--i)
Run Code Online (Sandbox Code Playgroud)
如果i没有签名,将永远不会退出.因为i是无符号的,所以它总是大于或等于零,因此循环不能结束.