检查偶数位数的和/乘积是否为数字的分配

时间:2013-11-17 18:27:48

标签: c++ function

编写一个程序,输出特定范围内的所有数字,可以除以它们的偶数位置的和和乘积。同时,如果偶数位置上有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;
}

1 个答案:

答案 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”