void Solve(int, int)
int Judge(int n)
int main()
{
int m, n
while(scanf("%d%d", &m, &n))
{
if(m==0 && n==0)
{
break
}
Solve(m, n)
}
return 0
}
void Solve(int m, int n)
{
int cnt = 0
for(int i = m i <= n ++i)
{
//为吉利数,则总数cnt加一
if(Judge(i))
{
++cnt
}
}
//输出总吉利数
printf("%d\n", cnt)
}
int Judge(int n)
{
int sum = 0
while(n)
{
sum += (n%10)
n /= 10
}
//各位数字的和为10的倍数,为吉利数
if(0 == sum % 10)
{
return 1
}
//非吉利数,返回0
return 0
}
定义数组 int array[1000000] 栈溢出了,要么这里改成少分配一些,如int array[100000],要么就采用malloc(C语言)或者new(C++)进行动态分配
一般一个进程的栈空间是2M,堆空间按照32位机器上是4G,所以你定义那么大的int型数组肯定直接溢出,可以算一下:
一个int占4字节,如果定义数组的话,那么2M/4=500K,当然进程启动本身就要很多东西要入栈,所以比500K要小。这里理论上定义int array[500000];但是实际上 还有其他的程序数据要入栈,所以不可能分配到这么多空间。
如果是动态分配出来的话,按照4G/4=1G,理论上应该比1G小点,即理论上动态分配大小为1000000000, 再大就堆溢出了。
判断方法如下:1)将所所有数字拆分为单个字符
2)使用if判断语句,查看是否有减6之后值为0的数,如果有,则继续后面的代码,
3)使用if判断语句,查看是否有减2之后值为0的数,如果也有,则输出。
如果一个变量名后面跟着一个有数字的中括号,这个声明就是数组声明。字符串也是一种数组。它们以ASCII的NULL作为数组的结束。要特别注意的是,中括号内的索引值是从0算起的。