问题:教孩子们从右到左添加多位数字,一次一位。许多人发现“进位”操作,即从一个数字位置到下一个数字位置的 1,是一项重大挑战。你的工作是为一组加法问题计算每个进位操作的次数,以便教育工作者评估他们的难度。
输入:每行输入包含两个小于 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';
}