通过随机数据进行测试

时间:2012-11-12 11:08:23

标签: c++ testing random

我正在做大学的学校作业 - 程序需要2个二进制数并写下它们的总和。我的大学使用一种特殊的软件来测试家庭作业,其中一项测试是“按随机数据测试”我的程序无法通过,有人可以给我一些提示,问题可以解决吗?程序:

#include <iostream>
#include <string>
using namespace std;
int B2D(string number)
{
    int result = 0, pow = 1;
    for ( int i = number.length() - 1; i >= 0; --i, pow <<= 1 )
        result += (number[i] - '0') * pow;

    return result;
}
string D2B(int number)
{
    if ( number == 0 ) return "0";
    if ( number == 1 ) return "1";

    if ( number % 2 == 0 )
        return D2B(number / 2) + "0";
    else
        return D2B(number / 2) + "1";
}
int main()
{
    string input_number;
    string input_number2;
    cout << "Write 2 binary numbers" << endl;
    if(!(cin >> input_number >> input_number2))
    {
        cout << "Wrong entry." << endl;
        return 0;
    }
    for(unsigned int i=0;i<input_number.size();i++){
        if((input_number[i] != '1') && (input_number[i] != '0'))
        {
            cout << "Wrong entry." << endl;
            return 0;
        }
    }
    for(unsigned int i=0;i<input_number2.size();i++){
        if((input_number2[i] != '1') && (input_number2[i] != '0'))
        {
            cout << "Wrong entry."<<endl;
            return 0;
        }
    }
    int result = B2D(input_number);
    int result2 = B2D(input_number2);
    int result3 = result + result2;
    string result4 = D2B(result3);
    cout << "Result: " << result4 << endl;
    return 0;
}

2 个答案:

答案 0 :(得分:0)

当二进制数非常高时,问题出现在功能B2D中。怎么解决?由于pow&lt;&lt; = 1

,我不能使用double

答案 1 :(得分:0)

如果问题是非常大的数字,你可以使用一个bigdecimal库,这可能是不允许的,或者像你在小学里学到的那样用手工计算:

  1. 取最后两位数字并添加
  2. 如果结果为0或1,则写入数字
  3. 如果结果大于2(二进制10或11)写下最低有效数字并将溢出带到下一个地方
  4. 在步骤1重复,直到处理完所有数字