当前位置: 首页 > news >正文

湘大 XTU OJ 1214 A+B IV 题解:数位移动的本质+布尔变量标记+朴素模拟

一、链接

A+B IV

二、题目

题目描述

小明喜欢做a+b的算术,但是他经常忘记把末位对齐,再进行加,所以,经常会算错。 比如12+13,他把12左移了1位,结果变成了133。 小明已经算了一些等式,请计算一下他到底移动了多少位。

输入

第一行是一个整数K,表示样例的个数。 以后每行一个样例,形如a+b=c, 1≤a,b≤1e4;0≤c≤1e9

输出

每行输出一个样例的结果,以b为标准,a如果往左移n位,输出n,如果往右移n位,输出-n。 测试数据保证一定有解,如果存在多个解,输出左移的结果

样例输入

6
12+13=1213
12+13=1312
12+13=25
12+13=12013
12+13=133
12+13=142

样例输出

2
-2
0
3
1
-1

三、题意

数字移位表示什么意思,其实是表示乘以10的整数次方,然后把两个数字相加,输出整数次方是多少

四、代码

c++代码

#include<iostream>using namespace std;int main()
{int t;//样例数scanf("%d",&t);while(t--){int a,b,c,count=0;//被加数,加数,和,计数器bool flag=false;//标记scanf("%d+%d=%d",&a,&b,&c);if(a+b==c)	printf("0\n");//特判else{//往左移,本质就是把被加数乘10的count次方for(int i=1;i<=1e9;i*=10){if(a*i+b==c)//表示找到了符合条件的数字{flag=true;break;}count++;}if(flag==true)	printf("%d\n",count);else{count=0;//重置计数器//右移,其实就是把加数乘以10的|count|次方for(int i=1;i<=1e9;i*=10){if(a+b*i==c){printf("%d\n",count);break;}count--;}}}}return 0;
}

c语言代码

#include<stdio.h>
#include<stdbool.h>int main()
{int t;scanf("%d",&t);while(t--){int a,b,c,count=0;bool flag=false;scanf("%d+%d=%d",&a,&b,&c);if(a+b==c)	printf("0\n");else{for(int i=1;i<=1e9;i*=10){if(a*i+b==c){flag=true;printf("%d\n",count);break;}count++;}if(flag==false){count=0;for(int i=1;i<=1e9;i*=10){if(a+b*i==c){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.总而言之:数位移动本质+布尔变量标记+朴素模拟

六、精美图片

 

http://www.lryc.cn/news/118119.html

相关文章:

  • 以商业大数据技术助力数据合规流通体系建立,合合信息参编《数据经纪从业人员评价规范》团标
  • 【论文阅读】Deep Instance Segmentation With Automotive Radar Detection Points
  • 易服客工作室:如何创建有用的内容日历
  • Excel革命,基于电子表格开发的新工具,不是Access和Power Fx
  • “崩溃”漏洞会影响英特尔 CPU 的使用寿命,可能会泄露加密密钥等
  • 17.电话号码的字母组合(回溯)
  • Redis小例子
  • ETLCloud+MaxCompute实现云数据仓库的高效实时同步
  • HTTP代理授权方式介绍
  • 《合成孔径雷达成像算法与实现》Figure3.4
  • qt5.15.2 使用mysql8.1
  • 广州华锐互动:VR3D课程在线教育平台为职业院校提供沉浸式的虚拟现实学习体验
  • clion run qt 问题汇总
  • 深入理解spring面经
  • 2023年,App运行小游戏,可以玩出什么创意?
  • 景嘉微电子2021笔试题
  • selenium官网文档阅读总结(day 4)
  • 15.4 【Linux】可唤醒停机期间的工作任务
  • [FPGA开发]解决正点原子Xilinx下载器无法下载、灯不亮的问题
  • DP(区间DP)
  • MySQL5.7保姆级安装教程
  • Linux:getopts解析命令行选项和参数
  • c语言——三子棋
  • Android 广播阻塞、延迟问题分析方法
  • HTML JS 解析器出sql 中 的所有表名称,支持多条SQL
  • 【雕爷学编程】Arduino动手做(05)---热敏电阻模块之的基本参数、模块特色、电原理与使用说明
  • MS31860T 国产 8通道串行接口低边驱动器 可PIN TO PIN替代DRV8860 高性价比
  • 百度 amis 当成 UI 库用
  • 质检工具(FindBugs、CheckStyle、Junit、Jmeter、Apifox)
  • MS31803TE 国产 四通道低边驱动器 PIN对PIN替代DRV8803