模拟竖式除法

Description

设有下列的算式:
                     8 0 9
            -----------
口口)   口口口口
              口口
      -----------
                口口口
               口口口
      -----------
                1
求出□中的数字,并打印出完整的算式来。
Input
无输入
Output
输出共五行,每行对应图中算式从上到下从左到右的一个数。
Sample Input 1
Sample Output 1
 
具体来说:
输出的第一行对应图中算式中左上角的那个未知的两位数;
输出的第二行对应图中的那个未知的四位数;
输出的第三行对应图中的另外一个未知的两位数;
输出的第四行对应图中的位置靠上的那个未知的三位数;
输出的第五行对应图中的位置靠下的那个未知的三位数。

大概长这个样子
11
1111
11
111
111
 
 
解析:这实际上就是小学刚学除法时,学习的竖式除法,我们只需要模拟一遍即可
思路:1)观察被除数有四位数代码中的a[count1],除数有两位数,即代码中的b[count1],所以我们只需用两个for循环枚举一遍即可;
2)模拟竖式除法:
(1)除数×8得到第一虚线和第二虚线的数 ,即下面代码中的b【count1】*8且它满足两位数,即小于100;
(2)取出a中的千位和百位,只需a[count1]/100 设为tmp1即可,再减去b[count1]*8得到第二虚线和第三虚线中的第一行的第一个数,接着凑出第一行的数,即(a/100-b[count1]*8)*100    +  a[count1]-tmp1*100;),
(3)最后一行继续模拟即可,假设    tmp2 = a[count1]-tmp1*100;   则利用最后的那个余数1 ,得到((tmp2+(tmp1-b[count1]*8)*100)-b[count1]*9==1);
(4)最后记得最后两行都满足大于100即可;
 
总之就是模拟一遍即可!
代码如下:
#include<iostream>
using namespace std;

int a[100000]; int b[100000]; int tmp1 = 0,tmp2 = 0; int count1 = 0; int main() { for(int i = 1000;i <= 9999 ;i++) { for(int j = 10 ;j <= 99;j++) { if((i/j==809)&&(i%j==1)) { a[count1] = i; b[count1] = j; tmp1 = a[count1]/100; tmp2 = a[count1]-tmp1*100; if(b[count1]*8<100&&(tmp1-b[count1]*8<10)&&((tmp2+(tmp1-b[count1]*8)*100)-b[count1]*9==1)&&(tmp2+(tmp1-b[count1]*8)*100)>100&&(b[count1]*9)>100) { cout<<b[count1]<<endl; cout<<a[count1]<<endl; cout<<b[count1]*8<<endl; cout<<tmp2+(tmp1-b[count1]*8)*100<<endl; cout<<b[count1]*9<<endl; } } } } return 0; }

 

转载于:https://www.cnblogs.com/yewanting/p/10533610.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值