原题目:
整除的尾数
问题简述:
知道一个数前面的几位,不知道后面两位,给出一个数,然后输出所有能够得到尾数;
注意空格;
解题思路:
本题可以用暴力算法;
个人做法思路:
1.先补零
如192→19200
2.补完后看看能不能整除
如200→20000 能整除40;
那么就直接输出“00”
3.找到节点
如:19200/95=202.10526
向下取整得202;
那么,逐步加1,
95 *203
95 *204
95 205
···
直到得到的数字又数第三位已经不同了
像95204=19380 百位数已经不同于一开始的19200的“2”了;
那么就跳出;
4.得到尾数
尾数可以用
95203 - 19200
95204 - 19200
···
如此类推得到;
一下为AC代码;
#include<iostream>
using namespace std;
int main()
{
int m, n;
while (cin>>m>>n)
{
if (m==0 && n==0)
{
break;
}
else
{
bool flag = false;
int shi = m * 100; //假设补上两个0的数字为shi
int xianzhi = m % 10; //得到右数第三个数的数字
int jiedian = shi / n; //得到最接近shi的n的倍数;
if (shi%n == 0) //先判断尾数00能不能被整除
{
cout << "00";
flag = true;
}
for (; ; )
{
int panduan; //用来判断一个新的数字是否可以输出
jiedian++;
panduan = jiedian * n;
if ((panduan / 100) % 10 == xianzhi) //如果第三个数仍然相同
{
if (flag) //如果开关是开的
{
int weishu; //用来输出的尾数
weishu = panduan - shi; //得到尾数
if (weishu / 10 == 0) //如果尾数是单位数
cout << " " << "0" << weishu;
else //不然;
cout << " " << weishu;
}
if (!flag) //如果开关是关闭的
{
int weishu;
weishu = panduan - shi;
if (weishu / 10 == 0)
cout << "0" << weishu;
else
cout << weishu;
flag = true;
}
}
else //如果第三个数不同;跳出
{
break;
}
}
cout << endl;
}
}
return 0;
}