C/C++

Помогите в C/C++. Пример в столбик

 #include  
#include
 
using namespace std;
 
bool is_native(string s)
{
  if (!s.size()) return false;
  for (auto c : s)
    if (!isdigit(c)) return false;
  return true;
}
 
inline char sum_digs(unsigned char a, unsigned char b, bool &carry)
{
  unsigned result = carry + a + b - 0x60;
  carry = result > 9;
  return 0x30 + (result % 10);
}
 
#define SYMBOL_OF(s, idx) ((idx) >= 0 ? (s)[(idx)] : '0')
 
// сложение столбиком двух натуральных чисел, в виде строк.
bool try_sum(string s1, string s2, string &sum)
{
  sum = "";
  if (!is_native(s1) || !is_native(s2)) return false; // error
  bool carry = false;
  for (int i = s1.size() - 1, j = s2.size() - 1; i > -1 || j > -1; i--, j--)
    sum = sum_digs(SYMBOL_OF(s1, i), SYMBOL_OF(s2, j), carry) + sum;
  if (carry) sum = '1' + sum;  
  return true;  
}
 
int main()
{
  string x1 = "184567930095460984394580394863754967059680499",
         x2 = "934587657924379273489567324658762783654725374627543", sum;
         
  if (try_sum(x1, x2, sum))
    cout
Какое уравнение? Тут обычное сложение в столбик, какое дети делают в 1-м классе.
И не "что б решалось", а чтоб (это слово пишется слитно) вывод делался в столбик. Вашей программой оно и так правильно"решается".

 #include 
#include
#include

using namespace std;

bool is_native(string s)
{
if (!s.size()) return false;
for (auto c : s)
if (!isdigit(c)) return false;
return true;
}

inline char sum_digs(unsigned char a, unsigned char b, bool &carry)
{
unsigned result = carry + a + b - 0x60;
carry = result > 9;
return 0x30 + (result % 10);
}

#define SYMBOL_OF(s, idx) ((idx) >= 0 ? (s)[(idx)] : '0')

// сложение столбиком двух натуральных чисел, в виде строк.
bool try_sum(string s1, string s2, string &sum)
{
sum = "";
if (!is_native(s1) || !is_native(s2)) return false; // error
bool carry = false;
for (int i = s1.size() - 1, j = s2.size() - 1; i > -1 || j > -1; i--, j--)
sum = sum_digs(SYMBOL_OF(s1, i), SYMBOL_OF(s2, j), carry) + sum;
if (carry) sum = '1' + sum;
return true;
}

int main()
{
string x1, x2, sum;

cout > x1;
cout > x2;
size_t width = max(x1.size(), x2.size()) + 1;

if (try_sum(x1, x2, sum)) {
cout
АК
Андрей Кузьменко
54 053
Лучший ответ