Проблема: детей учат добавлять мульти-числа git справа налево, по одному ди git за раз. Многие находят, что операция «перенос», где 1 переносится из одной позиции di git в другую, является серьезной проблемой. Ваша задача состоит в том, чтобы подсчитать количество операций переноса для каждой из множества задач сложения, чтобы преподаватели могли оценить их сложность.
Ввод: каждая строка ввода содержит два беззнаковых целых числа меньше 10 цифр. Последняя строка ввода содержит «0» 0.
Примеры ввода: Для каждой строки ввода, кроме последней, вычислите количество операций переноса, полученных в результате добавления двух чисел, и распечатайте их в формате, показанном ниже.
Это оригинал код, который удовлетворяет вводам, которые меньше 10 цифр
#include <iostream>
#include <cstdio>
#include <cstdlib>
int main(void){
unsigned int n1, n2, remain_n1, remain_n2, carry;
while(1)
{
std::cin >> n1 >> n2;
if(n1 == 0 && n2 == 0)
break;
int carry = 0;
int count = 0;
int sum = 0;
while(n1 != 0 || n2 != 0)
{
remain_n1 = n1 % 10;
remain_n2 = n2 % 10;
if(carry == 1)
remain_n1++;
sum = remain_n1 + remain_n2;
carry = 0;
if(sum >= 10){
carry = carry + 1;
count = count + 1;
}
n1 = n1 / 10;
n2 = n2 / 10;
}
if(count == 0)
std::cout << "No carry operation." << std::endl;
else if(count == 1)
std::cout << count << " " << "carry operation" << std::endl;
else
std::cout << count << " " << "carry operations" << std::endl;
}
return 0;
}
В проблемном вводе написано менее 10 цифр, но я хочу изменить его, чтобы он удовлетворял условию независимо от того, что вводится. И это мой код. Как мне это исправить?
std:;string n1, n2;
while(1){
std:;cint >> n1 >> n2;
if(n1 == "0" && n2 == "0")
break;
int max_len = n1.szie();
if (max_len < n2.size())
max_len = n2.size();
int nn1[max_len] - {0);
int nn2[max_len] = {0};
for(int i = 0; i < n1.size(); i++)
nn1[max_len - n1.size() + i]; = n1[i] - '0';
}