【问题标题】:why output sometimes fails为什么输出有时会失败
【发布时间】:2014-02-18 10:08:30
【问题描述】:

我在codechef上练习编程,有一个练习“智能阶乘”,

问题是:

输入 一个整数 t,1

输出

对于输入时给出的每个整数 n,显示一个值为 n 的行! 示例

示例输入:

4
1
2
5
3

样本输出:

1
2
120
6

我写了我的 fact.cpp,但它的输出很奇怪。有时它是正确的,但有时它的输出是这样的:

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--;
    }
}  

【问题讨论】:

  • TLDR 但您应该始终初始化您的变量,并且您不应该对向量和循环做如此复杂的事情。
  • 这会有所帮助,如果您将代码格式化为“合理”:-)
  • 我将从查看输出 100 的案例开始,因为它显然是错误的,而且调试起来也不是很乏味。
  • 仔细查看mult。您可能缺少一些“携带管理”。我运行了您的代码并得到了错误的 99 响应!和 100!在 MINGW,我没有得到错误的格式化输出。生成大因子here

标签: c++


【解决方案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<lines; i++){
        int n;
        std::cin >> n;
        std::cout << factorial(n) << std::endl;
    }
}

【讨论】:

  • 哦,刚刚注意到给定的数字可以达到 100,以上不适用于大于约 15 的数字
  • 问题在于解决方案应该采用 n==100,正如@Dima Maligin 指出的那样。
猜你喜欢
  • 2016-05-06
  • 1970-01-01
  • 2021-06-30
  • 2011-06-30
  • 2011-09-18
  • 2010-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多