题目如下:
本题的思路如下:
对于输入的两个数,我们需要将最后的位数进行相加,以确定是否会产生进位,那么这样的方法有很多。
- 可以利用String来存取数据 ,这样可以取得每一位的数据,但是这样操作的缺陷在于运算的时候取出来的数据同样也是string类型的;
- 可以利用char[]来存取数据,这样也同样可以取得每一位的数据,但是他与string有着同样的缺陷;
- 用int来存取数据,通过除法运算以及取余运算可以取得每一位,这样在操作的时候数据依然是int\类型的。本题我们采用这样的方法来解题。
有了以上的思路,我们在编写程序的时候就会很清晰,代码以及相应的解释如下:
#include<iostream> #include<string> #include<stdio.h> using namespace std; int main() { int a, b, x, y, c; int result;//存放进位的个数 cin >> a >> b; //判断输入如果等于0 0 就结束程序 while (a != 0 && b != 0)// { if (a == 0 && b == 0) break; result = 0; c = 0; while (a > 0 || b > 0) { //取得两个数中的最后一位 x = a % 10; y = b % 10; //改变数据,去掉最后一位 a = a / 10; b = b / 10; //判断是不是产生进位 c = x + y + c; //如果产生了进位 就将count加一 if (c >= 10) { result++; c = c / 10; } else { c = 0; } } //按照要求来规范输出格式 if (result == 0) printf("No carry operation.\n"); else { if (result > 1) printf("%d carry operations.\n", result); else printf("%d carry operation.\n", result); } cin >> a >> b; } return 0; }
运行程序测试结果如下: