你得到一个整数N.找到这个数字中的数字,确切地划分N我的代码给我一个超时消息,即由于超时或超出CPU时间限制而终止(核心转储)。这是我的代码enter code here
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main()
{
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int T, cnt, digits1, digits2, rem;
long long x;
char N[11];
scanf("%d", &T);
for (int i = 1; i <= T; i++)
{
scanf("%10c", N);
int x = (atoll(N));
digits1 = x;
while (digits1 != 0)
{
digits1 = x/10;
cnt++;
}
// char buffer[cnt + 1];
for(int j = 1; j <= cnt; j++)
{
rem = x % N[j];
if (rem == 0)
{
digits2++;
}
}
printf("%d", digits2);
}
return 0;
}
答案 0 :(得分:0)
这看起来像是家庭作业。
我会给出一些指示。
将输入字符转换为实际的int
或long
(或您的long long
)后,请勿使用数字进行数字处理 - 特别是在基数为10时。如果您我会做那样的事情然后你可以把它留在char
数组形式。不需要这个位:
while (digits1 != 0)
{
digits1 = x/10;
cnt++;
}
您有未初始化的值。不要假设一切都自动初始化为零。有时你很幸运......但通常你不会。
看起来不错:
for(int j = 1; j <= cnt; j++)
{
rem = x % N[j]; //not quite right N is ASCII
if (rem == 0)
{
digits2++;
}
}