网站优化排名方案,成都园林景观设计公司推荐,温州网站建设技术外包,建设电子商务网站的必要性一、链接
AB IV
二、题目
题目描述
小明喜欢做ab的算术#xff0c;但是他经常忘记把末位对齐#xff0c;再进行加#xff0c;所以#xff0c;经常会算错。 比如1213#xff0c;他把12左移了1位#xff0c;结果变成了133。 小明已经算了一些等式#xff0c;请计算一下…一、链接
AB IV
二、题目
题目描述
小明喜欢做ab的算术但是他经常忘记把末位对齐再进行加所以经常会算错。 比如1213他把12左移了1位结果变成了133。 小明已经算了一些等式请计算一下他到底移动了多少位。
输入
第一行是一个整数K表示样例的个数。 以后每行一个样例形如abc, 1≤a,b≤1e4;0≤c≤1e9。
输出
每行输出一个样例的结果以b为标准a如果往左移n位输出n如果往右移n位输出-n。 测试数据保证一定有解如果存在多个解输出左移的结果。
样例输入
6
12131213
12131312
121325
121312013
1213133
1213142
样例输出
2
-2
0
3
1
-1
三、题意
数字移位表示什么意思其实是表示乘以10的整数次方然后把两个数字相加输出整数次方是多少
四、代码
c代码
#includeiostreamusing namespace std;int main()
{int t;//样例数scanf(%d,t);while(t--){int a,b,c,count0;//被加数加数和计数器bool flagfalse;//标记scanf(%d%d%d,a,b,c);if(abc) printf(0\n);//特判else{//往左移本质就是把被加数乘10的count次方for(int i1;i1e9;i*10){if(a*ibc)//表示找到了符合条件的数字{flagtrue;break;}count;}if(flagtrue) printf(%d\n,count);else{count0;//重置计数器//右移其实就是把加数乘以10的|count|次方for(int i1;i1e9;i*10){if(ab*ic){printf(%d\n,count);break;}count--;}}}}return 0;
}
c语言代码
#includestdio.h
#includestdbool.hint main()
{int t;scanf(%d,t);while(t--){int a,b,c,count0;bool flagfalse;scanf(%d%d%d,a,b,c);if(abc) printf(0\n);else{for(int i1;i1e9;i*10){if(a*ibc){flagtrue;printf(%d\n,count);break;}count;}if(flagfalse){count0;for(int i1;i1e9;i*10){if(ab*ic){printf(%d\n,count);break;}count--;}}}}return 0;
} 五、总结
1.如上所说数字移位的本质是乘以10的整数次方然后朴素模拟实现这个要求即可
2.首先进行一个特判如果两个数字的和刚好等于第三个数说明是运算正确的所以直接输出0表示不用移位
3.除了这种情况就需要进行朴素模拟了数字最大不会超过9个0所以我们把循环定在从1到9个0当然每一次是乘十不然时间复杂度肯定过大。先分析左移的情况左移是被加数乘以10的整数次方找到了符合条件的就输出答案并且跳出循环
4.布尔变量标记找到符合条件的做一次标记每一次循环就把计数器增加一次
5.比如说把布尔变量初始化为false,找到左移的就把布尔变量标记为true,如果循环结束之后布尔变量还是false就表示找不到符合条件的左移的情况说明是右移
6.右移就是把加数乘以10的整数次方这个时候先把计数器归零从0开始减小每一次减小1还是像上面循环一样找到符合条件的就输出答案跳出循环
7.总而言之数位移动本质布尔变量标记朴素模拟
六、精美图片