0x03-g a+b ib
题目
思路
十进制数,以b为标准,a左移一位,相当于a*10,a右移一位,相当于b左移了一位,即b*10,然后观察a、b、c的数量级和输出可知,n最大为5,然后这题就解决了,可以用幂函数,但是要注意幂函数pow的输出是浮点数,所以这里我们要把幂函数的结果强制转化为int整型
代码一
#include<stdio.h>
#include<math.h>int a,b,c;int cnt(int a,int b,int c){if(a+b==c) return 0;int n;int base=10;for(n=1;n<=5;n++){if(a*base+b==c) return n;if(b*base+a==c) return -n;base*=10;}return 0;
}int main(){int K;scanf("%d",&K);while(K--){scanf("%d+%d=%d",&a,&b,&c);printf("%d\n",cnt(a,b,c));}return 0;
}
代码二
/*用a1和b1分别存储a和b的值
(1)a左移i位,a1为a扩大10的i次方倍,判断a1+b是否等于c即可
(2)a右移,相当于b左移,与1同理。b1为b扩大10的i次方倍,判断a+b1是否等于c即可
(3)a不移,直接判断a+b是否等于c即可。*/
#include <stdio.h>
#include <math.h>int main() {int T;scanf("%d", &T);while (T--) {int a, b, c;scanf("%d+%d=%d", &a, &b, &c);if (a + b == c) {printf("0\n");continue;}int shift;for (shift = 1; ; shift++) {int new_a = a * (int)pow(10, shift);if (new_a + b == c) {printf("%d\n", shift);break;}int new_b = b * (int)pow(10, shift);if (a + new_b == c) {printf("%d\n", -shift);break;}}}return 0;
}