HDU - 2099 - 整除的尾数

原题目:
整除的尾数

问题简述:
知道一个数前面的几位,不知道后面两位,给出一个数,然后输出所有能够得到尾数;
注意空格;

解题思路:

本题可以用暴力算法;

个人做法思路:

1.先补零
如192→19200

2.补完后看看能不能整除
如200→20000 能整除40;
那么就直接输出“00”

3.找到节点
如:19200/95=202.10526

向下取整得202;

那么,逐步加1,

95 *203
95 *204
95 205
···
直到得到的数字又数第三位已经不同了
像95
204=19380 百位数已经不同于一开始的19200的“2”了;
那么就跳出;

4.得到尾数
尾数可以用
95203 - 19200
95
204 - 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;
}

猜你喜欢

转载自blog.csdn.net/qq_26558047/article/details/85004861