#include <iostream>
using namespace std;
/*
一个整数,只知道前几位,不知道末二位,被另一个整数除尽了,那么该数的末二位该是什么呢?
Input
输入数据有若干组,每组数据包含二个整数a,b(0<a<10000, 10<b<100),若遇到0 0则处理结束。
Output
对应每组数据,将满足条件的所有尾数在一行内输出,格式见样本输出。同组数据的输出,其每个尾数之间空一格,行末没有空格。
Sample Input
200 40
1992 95
0 0
Sample Output
00 40 80
15
*/
//a = 200 ,b = 40,返回值[00, 40, 80] ,*returnSize = 3
int* calcTail(int a, int b, int* returnSize) { //1、返回值代表结果数组的首地址,returnSize 是外部传进来的一个地址
//传入的值:200 40 000000EA32CFFB54
//cout <<"传入的值:" << a << " " << b << " " << returnSize << endl;
*returnSize = 0; //2、对外部传进来的数组大小,进行初始化
//此时returnsize 初始化为0后的值:0
//cout << "此时returnsize 初始化为0后的值:" << *returnSize << endl;
int* ret = new int[100]; //3、申请一个数组内存,最多100个元素
for (int i = 0; i < 100; i++)
{
// (200 * 100 + i) % 40 == 0
if ((a * 100 +i) % b ==0 ) //4、枚举所有a的最后2位,并且判断是否整除,如果整除则塞入结果数组
{
//cout << "for循环中i的值:" << i << endl;
ret[(*returnSize)++] = i; //5、(*returnSize)++ ,代表将数组的大小 +1
//ret[1] = 0,ret[2] = 40,ret[3] = 80
cout << "*returnSize)++的值:" << *returnSize << endl;
}
}
//cout << "ret的值:" << ret << endl;
return ret;
}
int main() {
int a, b;
while (cin>> a>>b)
{
if (!a && !b)
{
break;
}
int size;
int* ret = calcTail(a, b, &size); //200 40 000000C6A92FF8C4
//cout << a << " " << b << " " << &size << endl;
for (int i = 0; i < size; i++)
{
if (i)
{
cout << " ";
}
if (ret[i] < 10)
{
cout << "0";
}
cout << ret[i];
}
cout << endl;
delete[] ret;
}
return 0;
}
9-习题-2.整除的尾数
来自
标签:
发表回复