C++ 相同输入的不同表意文字和代码块输出(小阶乘)
下面的代码计算输入整数的阶乘。我在代码块中运行了2个测试用例-9和2,得到了正确的输出。对于相同的输入,ideone将2的阶乘输出为6,但它正确地输出了9的阶乘。出什么事了?另外,当我将b设为大小为200的静态数组而不是动态数组时,ideone会给出正确的输出C++ 相同输入的不同表意文字和代码块输出(小阶乘),c++,arrays,dynamic,C++,Arrays,Dynamic,下面的代码计算输入整数的阶乘。我在代码块中运行了2个测试用例-9和2,得到了正确的输出。对于相同的输入,ideone将2的阶乘输出为6,但它正确地输出了9的阶乘。出什么事了?另外,当我将b设为大小为200的静态数组而不是动态数组时,ideone会给出正确的输出 #include <iostream> #include <cstdio> using namespace std; int main(){ int t,i,j,k,temp,carry=0,len=0;
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int t,i,j,k,temp,carry=0,len=0;
scanf("%d",&t);
int *b=new int;
int *a=new int[t];
for (i=0;i<t;i++){
scanf("%d",&a[i]);
}
for (i=0;i<t;i++){
len=0;
b[0]=1;
for (j=1;j<=a[i];j++){
carry=0;
for (k=0;k<=len;k++){
temp=b[k]*j+carry;
b[k]=temp%10;
carry=temp/10;
}
while (carry!=0){
b[++len]=carry%10;
carry/=10;
}
}
for (j=len;j>=0;j--){
printf("%d",b[j]);
}
printf("\n");
}
return 0;
}
#包括
#包括
使用名称空间std;
int main(){
int t,i,j,k,temp,进位=0,len=0;
scanf(“%d”、&t);
int*b=新的int;
int*a=新的int[t];
对于(i=0;i
只为b
分配一个对象。之后,只有b[0]
或*b
有效。b[k]
对k
的值无效,而不是0
。因此,程序具有未定义的行为
如果大小为200的静态数组有效,则
int *b=new int[200];
应该有用
如果数组的大小在编译时已知,我建议使用数组而不是使用动态分配的内存
int b[200];
结束
int*b=new int;
--为什么在这里使用指针?为什么不直接声明一个int
?另外,我不明白你在程序中输入的是什么。你说你输入了9
和2
,但是你的程序显示scanf
被循环调用。为什么不把数据硬编码到程序中,这样就不需要了没有人会感到困惑吗?谢谢,我现在知道了。但是为什么静态数组比动态数组更受欢迎有什么特别的原因吗?@NikhilKaushik,如果可以的话,有两个原因可以使用静态数组。动态数组需要更多的代码来管理分配和释放。使用动态分配的内存成本更高-运行成本更高时间必须做簿记工作。
int b[200];
int *b=new int[200];