n倍数关系,5个测试点有一个没过,改了long还是不行

问题遇到的现象和发生背景

题目编号:Exp04-Basic02

题目名称:n倍数关系

题目描述:

给定若干不完全相同的正整数(<10000)和n(n<5),计算这些正整数里面有多少数对满足:其中一个是另一个的n倍。例如:1 4 3 2 9 7 18 22,n=3时得到的答案是2;因为3是1的3倍,9是3的3倍。

输入:输入第一行给出正整数n的值,接下来包括多组测试数据。每组数据最多100个整数占用一行,以数字0结束(不计入100个整数里)。测试数据不超过20组,最后一行只包括-1,表示输入数据结束。

输出:对每组输入数据,输出一行,给出有多少数对满足其中一个是另一个n倍。(注:最后一行末尾无换行符等多余字符。)

样例:

输入:
2
1 4 3 2 9 7 18 22 0
2 4 8 10 0
7 5 11 13 1 3 0
-1
输出:
3
2
0

这是我的代码


#include<stdio.h>
int main()
{
    int n, i, j;
    long a[100][100] = { 0 };
    scanf("%d", &n);
    for (i = 0; i < 100; i++)
    {
        for (j = 0; j < 100; j++)
        {
            scanf("%ld", &(a[i][j]));
            if (a[i][j] == 0 || a[i][j] == -1)
            {
                break;
            }
        }
        if (a[i][0] == -1)break;
        if (n != 1)
        {
            int x = 0;
            for (int k = 0; k <= j - 1; k++)
            {
                for (int s = 0; s <= j - 1; s++)
                {
                    if ((a[i][k]) / (a[i][s]) == n && (a[i][k]) % (a[i][s]) == 0)
                        x++;
                }
             }
            printf("%d\n", x);
        }
        if (n == 1)
        {
            int y = 0;
            for (int k = 0; k <= j - 2; k++)
            {
                for (int s = k + 1; s <= j - 1; s++)
                {
                    if ((a[i][k]) == (a[i][s]))
                        y++;
                }
            }
            printf("%d\n", y);
        }
    }
    return 0;
}

已经告诉你<10000了,int型足够存了。
你出错不是类型错误,是逻辑有问题
题目要求的是输入多行,然后再输出多行
你的逻辑是每输入一行就处理一行,然后直接输出
那只要测试样例里数据是多行的,你这一定不通过。
-=-=
还有,n=1和n!=1其实逻辑一样,不需要分开处理,但是要写好条件,k!=s,不要自己除自己
还有(a[i][k]) / (a[i][s]) == n && (a[i][k]) % (a[i][s]) == 0这个逻辑太繁琐
用a[i][s]*n==a[i][k]就可以了

不是整数越界的问题,应该是算法逻辑的问题。
多组数据的处理,按说应该先建立缓冲区存放输入的数据,我的意思是是输入几组,就要缓存几组。
如果你觉得输入的组数不确定的话,可以每输入一组就处理一组,但是,处理结果要进行缓存,不能直接输出。
我觉得,你的代码没过,应该就是因为,你每次处理完一组,就直接输出了。