9-习题-2.整除的尾数

#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;
}

已发布

分类

来自

标签:

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注