Добрый день! Помогите пожалуйста разобраться! Нужно написать программу для вычитания двух целых чисел, разрядности около 200. У меня есть программа для сложения. Писала правда не сама, код нашла и немного переделала под себя, как мне понятнее. Теперь нужно из этой программы сделать вычитание. Вот тут и загвоздка, никак не могу сообразить, как это сделать. Как я понимаю, сначала нужно сравнить 2 числа по длине( то есть, определить бОльшее), если длины одинаковы, то сравнить первые цифры и затем выполнить само вычитание, сложность для меня возникла с тем, когда нужно занимать десяток из предыдущего разряда и вообще, получается куча ветвлений, что-то я совсем в них потерялась... Ниже привела готовый код для сложения, а после - мои жалкие попытки получить программу для вычитания. Пожалуйста, не кидайтесь тапками, если дело совсем плохо, я не шарю, а очень нужно Буду признательна за любую помощь!
| Цитата | #include <iostream> using namespace std; char * sum(char *a, char *b) { int len1 = strlen(a); // количество разрядов первого числа int len2 = strlen(b); // количество разрядов второго числа char *c; int razr = 0; // перенос в следующий разряд int k; if (len1 > len2) k = len1; else ( k = len2); c = new char[k + 2]; int i, j; k++; c[k] = ' \0'; // завершающий нуль-символ результата k--; for (i = len1 - 1, j = len2 - 1; i >= 0 || j >= 0; i--, j--) { //char dig1 = i < 0 ? 0 : a[i] - '0'; // если разряд отсутствует, взять 0 //dig1=0 else dig1=a[i]-'0'; //for (i = lena-1, j = lenb -1; i>=0, j>=0; i--,j--) //for (int j = lenb-1; j>=0; j++) char sum1; if (i < 0) sum1 = 0; else sum1 = a[i]-'0'; //char dig2 = j < 0 ? 0 : b[j] - '0'; // иначе преобразовать символ в цифру char sum2; if (j < 0) sum2 = 0; else sum2 = b[j] - '0'; char sum = sum1 + sum1 + razr; // сложить две цифры разрядов и перенос if (sum > 9) { // если сумма разрядов >9 sum = sum - 10; // отнять 10 razr = 1; // и сгенерировать перенос в следующий разряд } else razr = 0; // переноса нет c[k] = sum + '0'; // преобразовать цифру в символ k--; // перейти к следующему разряду } if (razr == 0) return &c[1]; // в старшем разряде результата пусто else { c[k] = razr + '0'; // заполнить старший разряд результата return c; } } int main() { setlocale (LC_ALL, "Russian"); cout << "Программа для сложения двух больших чисел: " << endl; char a[203]; char b[203]; cout << "Введите первое слагаемое: " << endl; cout << "a = "; cin >> a; cout << "Введите второе слагаемое: " << endl; cout << "b = "; cin >> b; cout << "Полученная сумма: " << endl; cout << a << "+" << b << "=" << sum(a, b) << endl; //cin.get(); return 0; }
|
| Цитата | #include <iostream> using namespace std; int compare(char *a, char *b) { int t, k; int len1 = strlen(a); // количество разрядов первого числа int len2 = strlen(b); // количество разрядов второго числа int i;
k = max(len1,len2);
t = 0; char *c; c = new char[k+2]; k++; c[k] = '\n'; k--; if (len1 > len2) t = 1; if (len2 > len1) t = 2; for (int i = 0; i < len1; i++) // поразрядное сравнение { if (a[i] > b[i]) t = 1; if (a[i] < b[i]) t = 3; } return t;
char umen, vich, razn; if ( t == 1) // решила начать с самого простого случая и тут же споткнулась { for ( i = k; i > 0; i --) { umen = a[i]-'0'; vich = b[i] - '0'; razn = umen - vich; } c[k]=razn+'0'; k--; return c; } } int main() { char a[203]; char b[203] ; cout << "a = "; cin >> a; cout << "b = "; cin >> b; cout << compare(a, b) << endl; return 0; }
|
|