コード例 #1
0
ファイル: task1.c プロジェクト: elsys/po-homework
int check_valid_control_number ( char * id ) {
    int sum = 0, reminder;
    sum = sum + (convert_char_to_int( id[0] ) * 2 );
    sum = sum + (convert_char_to_int( id[1] ) * 4 );
    sum = sum + (convert_char_to_int( id[2] ) * 8 );
    sum = sum + (convert_char_to_int( id[3] ) * 5 );
    sum = sum + (convert_char_to_int( id[4] ) * 10);
    sum = sum + (convert_char_to_int( id[5] ) * 9 );
    sum = sum + (convert_char_to_int( id[6] ) * 7 );
    sum = sum + (convert_char_to_int( id[7] ) * 3 );
    sum = sum + (convert_char_to_int( id[8] ) * 6 );
    if( sum % 11 == 10 ) reminder = 0;
    if( sum % 11 < 10  ) reminder = sum % 11;
    if( reminder == convert_char_to_int( id[9] ) ) return 1;
    else return 0;
}
コード例 #2
0
ファイル: main.c プロジェクト: thefool808/ece_applications
int get_input(int *sum){
  printf("Enter a binary number:  ");

  int tmp_sum = 0;
  char ch;

  while ( (ch = getchar()) != ASCII_NEWLINE ){
    if (is_binary(ch)){
      tmp_sum <<= 1;
      tmp_sum += convert_char_to_int(ch);
    } else if (is_exit_code(ch)){
      // exit_code found so return EXIT
      return EXIT;
    } else { // bad input
      // discard the rest of the line
      while ( (ch = getchar()) != ASCII_NEWLINE );
      // return false
      return FALSE;
    }
  }

  *sum += tmp_sum;

  // keep the sum 8 bits
  while (*sum >= HIGHEST_SUM){
    *sum = *sum - HIGHEST_SUM;
  }

  // everything worked
  return TRUE;
}
コード例 #3
0
BigInteger& BigInteger::operator*(BigInteger &other_obj){
    char one[2] = "1";
    BigInteger integer_1(one);
    BigInteger *integer_multi = NULL;

    unsigned long len = (*other_obj.get_data_string()).length();
    for (int i = 0;  i < len; i++) {
        int count = convert_char_to_int((*other_obj.get_data_string())[i]);
        BigInteger *integer_plus = NULL;
        BigInteger *integer_plus_pointer = NULL;
        BigInteger *integer_multi_pointer = NULL;
        if (count == 0){
            char zero[2] = "0";
            integer_plus = new BigInteger(zero);
        }else{
            while (count--) {
                if (integer_plus == NULL) {
                    string *plus_str = (this->get_data_string());
                    integer_plus = new BigInteger(*plus_str);
                    integer_plus_pointer = integer_plus;
                }else{
                    integer_plus = &((*this)+(*integer_plus));
                    delete integer_plus_pointer;
                    integer_plus_pointer = integer_plus;
                }
            }
            string_append_zero(integer_plus->data_string, (int)(len-i-1));
        }
        if (integer_multi == NULL) {
            string *plus_str = (integer_plus->get_data_string());
            integer_multi = new BigInteger(*plus_str);
            integer_multi_pointer = integer_multi;
        }else{
            integer_multi = &(*(integer_plus) + *(integer_multi));
            if (integer_multi_pointer != NULL) {
                delete integer_multi_pointer;
            }
            integer_multi_pointer = integer_multi;
        }
//        delete integer_plus_pointer;
//        delete integer_multi_pointer;
    }
    remove_zero(*integer_multi);
    BigInteger *result = new BigInteger(*(*integer_multi).get_data_string());
    return *result;
}
コード例 #4
0
string * BigInteger::operator+(BigInteger &other_interger)
{
    char *big_data_01 = reverse_string(this->str);
    char *big_data_02 = reverse_string(other_interger.get_data_string());
    
    char *plus_data = new char[10002];
    
    int index = 0;
    //是否进位
    bool is_sub = false;
    bool is_str1_finished = false;
    bool is_str2_finished = false;
    while (1) {
        int tmp_01,tmp_02;
        
        if (!is_str1_finished && big_data_01[index] != '\0') {
            tmp_01 = convert_char_to_int(big_data_01[index]);
        }else{
            is_str1_finished = true;
            tmp_01 = 0;
        }
        
        if (!is_str2_finished && big_data_02[index] != '\0') {
            tmp_02 = convert_char_to_int(big_data_02[index]);
        }else{
            is_str2_finished = true;
            tmp_02 = 0;
        }
        

        int tmp_sub = tmp_01 + tmp_02;
        if (is_sub) {
            tmp_sub++;
        }
        if (tmp_sub > 9) {
            is_sub = true;
        }else{
            is_sub = false;
        }
        plus_data[index] = convert_int_to_char(tmp_sub % 10);
        
        if (is_str1_finished && is_str2_finished) {
            if (plus_data[index] == 0 + '0') {
                plus_data[index] = '\0';
            }else{
                plus_data[index+1] = '\0';
            }
            break;
        }
        index++;
    }
    
    delete big_data_01;
    delete big_data_02;
    
    string *sub_reverse_str = new string(plus_data);
    char *sub_str_ = reverse_string(sub_reverse_str);
    delete sub_reverse_str;
    string *sub_str = new string(sub_str_);
    delete sub_str_;
    cout << "subn ; " << (*sub_str) <<endl;
    return sub_str;
}
コード例 #5
0
string * BigInteger::operator-(BigInteger &other_interger){
    int max_index = get_max_integer_index(*(this->str),*other_interger.get_data_string());
    bool is_nagetive = false;
    char *big_data_01;
    char *big_data_02;
    if (max_index == 1) {
        big_data_01 = reverse_string(this->str);
        big_data_02 = reverse_string(other_interger.get_data_string());
    }else{
        is_nagetive = true;
        big_data_01 = reverse_string(other_interger.get_data_string());
        big_data_02 = reverse_string(this->str);
    }
    
    char *minus_data = new char[103];
    int index = 0;
    //是否借位
    bool is_minus = false;
    bool is_str1_finished = false;
    bool is_str2_finished = false;
    while (true) {
        int tmp_01,tmp_02;
        
        if (!is_str1_finished && big_data_01[index] != '\0') {
            tmp_01 = convert_char_to_int(big_data_01[index]);
        }else{
            is_str1_finished = true;
            tmp_01 = 0;
        }
        
        if (!is_str2_finished && big_data_02[index] != '\0') {
            tmp_02 = convert_char_to_int(big_data_02[index]);
        }else{
            is_str2_finished = true;
            tmp_02 = 0;
        }
        
        int tmp_minus = tmp_01 - tmp_02;
        if (is_minus) {
            tmp_minus--;
        }
        if (tmp_minus < 0) {
            is_minus = true;
            tmp_minus = 10 + tmp_minus;
        }else{
            is_minus = false;
        }
        minus_data[index] = convert_int_to_char(tmp_minus);
        
        if (is_str1_finished && is_str2_finished) {
            minus_data[index] = '\0';
            while (true) {
                index--;
                if (minus_data[index] == 0 + '0') {
                    minus_data[index] = '\0';
                    if (index == 0) {
                        minus_data[0] = '0';
                        minus_data[1] = '\0';

                        break;
                    }
                }else{
                    index++;
                    break;
                }
            }
            break;
        }
        index++;
    }
    
    if (is_nagetive && index != 0) {
        minus_data[index] = '-';
        minus_data[index + 1] = '\0';
    }
    
    delete big_data_01;
    delete big_data_02;
    

    string *min_reverse_str = new string(minus_data);
    char *min_str_ = reverse_string(min_reverse_str);
    delete min_reverse_str;
    string *min_str = new string(min_str_);
    delete min_str_;
    return min_str;
}
コード例 #6
0
BigInteger& BigInteger::operator+(BigInteger &other_obj){
    string *reverse_str1 = reverse_string(this->data_string);
    string *reverse_str2 = reverse_string(other_obj.get_data_string());
    char *integer_01 = (char *)(*reverse_str1).c_str();
    char *integer_02 = (char *)(*reverse_str2).c_str();
    
    char *data_plus = new char[10002];
    
    int index = 0;
    
    //是否进位
    bool is_sub  = false;
    bool is_data1_finished = false;
    bool is_data2_finished = false;
    while (1) {
        int tmp_01,tmp_02;
        
        if (!is_data1_finished && integer_01[index] != '\0') {
            tmp_01 = convert_char_to_int(integer_01[index]);
        }else{
            is_data1_finished = true;
            tmp_01 = 0;
        }
        
        if (!is_data2_finished && integer_02[index] != '\0') {
            tmp_02 = convert_char_to_int(integer_02[index]);
        }else{
            is_data2_finished = true;
            tmp_02 = 0;
        }
        
        int tmp_sub = tmp_01 + tmp_02;
        if (is_sub) {
            tmp_sub++;
        }
        if (tmp_sub > 9) {
            is_sub = true;
        }else{
            is_sub = false;
        }
        data_plus[index] = convert_int_to_char(tmp_sub % 10);
        
        if (is_data1_finished && is_data2_finished) {
            if (data_plus[index] == 0 + '0') {
                data_plus[index] = '\0';
            }else{
                data_plus[index+1] = '\0';
            }
            break;
        }
        index++;
    }
    
    string *sub_reverse_str = new string(data_plus);
    string *result_str = reverse_string(sub_reverse_str);
    BigInteger *plus_integer = new BigInteger(*result_str);
    delete reverse_str1;
    delete reverse_str2;
    delete sub_reverse_str;
    delete result_str;
    return *plus_integer;
}
コード例 #7
0
BigInteger& BigInteger::operator-(BigInteger &other_obj){
    BigInteger *minus_integer = NULL;
    if (*(this->data_string) == *other_obj.get_data_string()) {
        char zero[2] = "0";
        minus_integer = new BigInteger(zero);
        return *minus_integer;
    }
    int max_index = get_max_integer_index(*(this->data_string), *other_obj.get_data_string());
    bool is_nagetive = false;
    char *integer_01;
    char *integer_02;
    string *reverse_str1;
    string *reverse_str2;
    if (max_index == 2) {
        is_nagetive = true;
        reverse_str2 = reverse_string(this->data_string);
        reverse_str1 = reverse_string(other_obj.get_data_string());
    }else{
        is_nagetive = false;
        reverse_str1 = reverse_string(this->data_string);
        reverse_str2 = reverse_string(other_obj.get_data_string());
    }
    integer_01 = (char *)(*reverse_str1).c_str();
    integer_02 = (char *)(*reverse_str2).c_str();
    
    char minus_data[103];
    int index = 0;
    bool is_minus = false;          //是否借位
    bool is_str1_finished = false;
    bool is_str2_finished = false;
    
    while (1) {
        int tmp_01,tmp_02;
        
        if (!is_str1_finished && integer_01[index] != '\0') {
            tmp_01 = convert_char_to_int(integer_01[index]);
        }else{
            is_str1_finished = true;
            tmp_01 = 0;
        }
        
        if (!is_str2_finished && integer_02[index] != '\0') {
            tmp_02 = convert_char_to_int(integer_02[index]);
        }else{
            is_str2_finished = true;
            tmp_02 = 0;
        }
        
        int tmp_minus = tmp_01 - tmp_02;
        if (is_minus) {
            tmp_minus--;
        }
        if (tmp_minus < 0) {
            is_minus = true;
            tmp_minus += 10;
        }else{
            is_minus = false;
        }
        minus_data[index] = convert_int_to_char(tmp_minus);
        
        if (is_str1_finished && is_str2_finished) {
            minus_data[index] = '\0';
            while (1) {
                index--;
                if (minus_data[index] == 0+'0') {
                    minus_data[index] = '\0';
                }else{
                    break;
                }
            }
            break;
        }
        index++;
    }
    
    if (is_nagetive) {
        minus_data[index+1] = '-';
        minus_data[index + 2] = '\0';
    }
    
    string *minus_reverse_str = new string(minus_data);
    string *minus_str = reverse_string(minus_reverse_str);
    minus_integer = new BigInteger(*minus_str);
    delete reverse_str1;
    delete reverse_str2;
    delete minus_reverse_str;
    delete minus_str;
    
    return *minus_integer;
}