C++ 为什么输出有时会失败
我正在codechef上练习编程,有一个练习“smart factorial” 问题是: 输入 一个整数t,1给你:C++ 为什么输出有时会失败,c++,C++,我正在codechef上练习编程,有一个练习“smart factorial” 问题是: 输入 一个整数t,1给你: #include <iostream> int factorial(int num){ if(num==1) return num; return num*factorial(num-1); } int main(){ int lines; std::cin >> lines; for(int i=0; i<
#include <iostream>
int factorial(int num){
if(num==1) return num;
return num*factorial(num-1);
}
int main(){
int lines;
std::cin >> lines;
for(int i=0; i<lines; i++){
int n;
std::cin >> n;
std::cout << factorial(n) << std::endl;
}
}
#包括
整数阶乘(整数){
如果(num==1)返回num;
返回num*factorial(num-1);
}
int main(){
内线;
std::cin>>行;
对于(int i=0;i>n;
std::cout TLDR但您应该始终初始化变量,并且不应该对向量和循环执行过于复杂的操作。如果您将代码的格式设置为“合理的”:-)首先,我要看一看输出为100的案例,因为它显然是错误的,调试起来也不太繁琐。请仔细看一下mult
。您可能缺少一些“进位管理”。我运行了您的代码,得到了99!和100!的错误响应。在MINGW,我没有得到格式错误的输出。生成大的factorials。噢,jusI don’我没有注意到给定的数字可能高达100,上面的数字不适用于大于15的数字问题在于,正如@Dima Maligin指出的,解决方案应该取n==100。
1
2
120
6
6
100
150485922355943662067262689687459530715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000(suppose it's right)
(FOLLOWING IS NOT MY INPUT,IT'S OUTPUT)
1
1
1
1
1
$
#include <iostream>
#include <vector>
using namespace std;
void mult(vector<int>& a, int n); // vector = a*n
int main(int argc,char** argv)
{
int numOfLine;
cin>> numOfLine;
while(numOfLine)
{
int num; //Sometimes fails here!!!! Why??????
cin >> num;
vector<int> res;
res.push_back(1);
for(int i=0;i<num;++i)
{
mult(res,i+1);
}
int n = res.size();
for(;n>0;n--)
{
cout << res[n-1];
}
cout << endl;
numOfLine--;
}
}
void mult(vector<int>& a, int n)
{
int s = a.size();
int j; //accumulator
a.push_back(0); //n<=100
a.push_back(0);
for(int i=0;i<s;++i) //first mult every digit
{
a[i] = a[i]*n;
}
//second shift left
for(int i=0;i<s;++i)
{
int tmp = a[i];
j = i;
while(tmp)
{
if(j==i)
{
a[j++] = tmp%10;
tmp /= 10;
}
else
{
a[j++] += tmp%10;
tmp /= 10;
}
}
}
//pop_back beginning zero
int t = s+1;
while(!a[t])
{
a.pop_back();
t--;
}
}
#include <iostream>
int factorial(int num){
if(num==1) return num;
return num*factorial(num-1);
}
int main(){
int lines;
std::cin >> lines;
for(int i=0; i<lines; i++){
int n;
std::cin >> n;
std::cout << factorial(n) << std::endl;
}
}