编写一个程序,输出特定范围内的所有数字,可以除以它们的偶数位置的和和乘积。同时,如果偶数位置上有0,则忽略它。我在下面编写了程序,但是由于某些原因它似乎崩溃了。没有错误,程序运行正常,然后我输入范围,它崩溃。
#include <iostream>
using namespace std;
int zbirparnicifri(int x);
int proizparnicifri(int x);
int main()
{
int x, y, br = 0;
cin >> x >> y;
for (int i = x; i <= y; i++){
int proizcif = proizparnicifri(i);
int zbircif = zbirparnicifri(i);
if(zbircif != 0 && proizcif != 0){
if (i % proizcif == 0 && i % zbircif == 0){
cout << i << endl;
br++;
}
}
}
return 0;
}
int zbirparnicifri(int x)
{
int sum = 0;
while(x > 0){
if (x % 100 != 0)
sum += x % 100;
x /= 100;
}
return sum;
}
int proizparnicifri(int x)
{
int proiz = 1;
while(x > 0){
if (x % 100 != 0)
proiz *= x % 100;
x /= 100;
}
return proiz;
}
答案 0 :(得分:2)
欢迎使用堆栈溢出。你不能指望社区调试你的程序,除非你已经表现出诚实的努力来自己尝试一些东西。例如,您是否尝试添加一些print / cout语句来发现程序崩溃的行(以及某些变量的值)?您是否尝试使用调试器。
由于我心情愉快,让我们看看调试器说的是什么......
jselbie@judaspriest ~ $ gdb a.out
GNU gdb (GDB) 7.5-ubuntu
Copyright (C) 2012 Free Software Foundation, Inc....
Reading symbols from /home/jselbie/a.out...done.
(gdb) run
Starting program: /home/jselbie/a.out
10
20
Program received signal SIGFPE, Arithmetic exception.
0x00000000004009f5 in main () at foo.cpp:17
17 if (i % proizcif == 0 && i % zbircif == 0){
(gdb) print i
$1 = 10
(gdb) print proizcif
$2 = 0
(gdb) print zbircif
$3 = 0
所以你去 - “proizcif”为零。以及zbifcif为零。所以它在第17行崩溃试图计算“i%0”