注册 登录
编程论坛 C++教室

帮忙看下逻辑错误

lintaoyn 发布于 2009-11-19 22:47, 519 次点击
这个程序里的思想是:
结果 += 进位;
进位 = 结果 / 进制(我写的是100进制)
#include<vector>
#include<iostream>
using namespace std;
int main()
{
    int b = 0;//进位
    vector<unsigned int> arr;//用来存放结果
    arr.push_back(1);
    cout << "请入所要求阶乘的数" << endl;
    int x;
    cin >> x;
    bool count = false;//用来判断最高位进行乘法后是否有进位
    for (int i = 1, j = 0; i <= x; ++i)
    {
        for (int temp = 0; temp <= j; ++temp)
        {
            arr [temp] *= i;
            arr [temp] += b;
            if (arr[temp] > 99)
            {
                b = arr[temp] / 100;
                arr [temp] %= 100;
                if(temp == j) count = true;
            }
        }
        if(count)//最后一次是否有进位
        {
            while (b)
            {
                arr.push_back(b % 100);
                b /= 100;
                ++j;
            }
            count = false;
        }
    }
    //输出结果
    cout << arr [j--];
    for (; j >= 0; --j)
    {
        if(arr[j] > 9)//保证每部分都以两位数输出
            cout << arr[j];
        else
            cout << 0 << arr[j];
    }
    cout << endl;
    return 0;
}

我想里面有个逻辑错误,因为和我以前写的一个求出来的结果不一样。找不出来是哪里错了…高手给帮忙看看。
2 回复
#2
flyingcloude2009-11-19 23:44
调试也是学习中必不可少的一部分,你可以试着去单步跟踪,看看变量变化是否都正确
#3
lintaoyn2009-11-22 19:45
arr [temp] *= i;
arr [temp] += b;
补上一句
b = 0;
1