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