题目描述
小明喜欢做a+b的算术,但是他经常忘记把末位对齐,再进行加,所以,经常会算错。 比如12+13,他把12左移了1位,结果变成了133。 小明已经算了一些等式,请计算一下他到底移动了多少位。
输入
第一行是一个整数K,表示样例的个数。 以后每行一个样例,形如a+b=c, 1≤a,b≤1e4;0≤c≤1e9。
输出
每行输出一个样例的结果,以b为标准,a如果往左移n位,输出n,如果往右移n位,输出-n。 测试数据保证一定有解,如果存在多个解,输出左移的结果。
代码如下:
#include<stdio.h>
#include<string.h>
int main() {
int k = 0;
scanf_s("%d", &k);
while(k--)
{
int a = 0, b = 0, c = 0, i, j;
char s[23];
scanf_s("%s", s, sizeof(s));
int len = strlen(s);
for (i = 0; i < len; i++) {
if (s[i] >= '0' && s[i] <= '9')
a = a * 10 + s[i] - '0';
else break;
}
for (j = i + 1; j < len; j++) {
if (s[j] >= '0' && s[j] <= '9')
b = b * 10 + s[j] - '0';
else break;
}
for (i = j + 1; i < len; i++) c = c * 10 + s[i] - '0';
int A = a, B = b, count = 0;
if (A + B == c)printf("0\n");
else {
while (A + B < c) {
A *= 10;
count++;
}
if (A + B == c)printf("%d\n", count);
else {
count = 0;
while (a + b < c) {
b *= 10;
count++;
}
printf("%d\n", -count);
}
}
}
}
本文解析了小明在做加法时的错误,探讨了如何通过对比输入和结果来确定数字移动的位数,重点在于解决因末位对齐问题导致的计算错误。
940

被折叠的 条评论
为什么被折叠?



