代码 c++ 中的运行时错误
RunTime error in code c++
>我正在运行这段代码:
#include <iostream>
using namespace std;
int findNumbers(int number, int power);
int findPow(int base, int power);
int fact(int n);
int main() {
int n;
cin >> n;
cout << findNumbers(n, 1);
}
int findNumbers(int number, int power) {
int powerOf10 = findPow(10, power);
int numberTemp = number / (powerOf10/10);
int currentDigit = numberTemp % powerOf10; //errorLine
if (number/(powerOf10/10) == 0)
return 0;
int ans = findNumbers(number, power + 1);
int *digits = new int[10]();
for(int i = 0; i < 10; i++)
digits[i] = 0;
for(int i = power - 1; i > 0; i--) {
int power10temp = findPow(10, i);
int digitTemp = number % power10temp;
digits[digitTemp]++;
}
digits[currentDigit]++;
int numerator = fact(power - 1);
for(int i = currentDigit + 1; i < 10; i++) {
int denominator = 1;
if(digits[i] != 0) {
digits[i]--;
for(int j = 0; j < 10; j++) {
denominator = denominator * fact(digits[i]);
}
ans = ans + (numerator/denominator);
digits[i]++;
}
}
delete digits;
cout << ans << endl;
return ans;
}
int fact(int n) {
if (n <= 1)
return 1;
return n*fact(n-1);
}
int findPow(int base, int power) {
int ans = 1;
for(int i = 0; i < power; i++) {
ans = ans * base;
}
return ans;
}
我一直在尝试在我的CodeBlocks和Netbeans IDE中运行此代码。但是,在这两种情况下,程序都会在两者之间挂起,可能是由于某些运行时错误。但是,当我尝试在 ideone 编译器上运行它时,它运行没有任何错误。
我尝试过做什么?
我试图解决一个问题,我们必须找到"数字"的数量,这些数字由与原始数字相同的数字组成。因此,我正在尝试使用排列和组合公式来增加数字的数量。
请参阅代码,有一行我注释了"errorLine"。如果我将那行代码更改为以下内容:
int currentDigit = numberTemp % 10;
然后我的程序终止!所以,这条线可能有问题。但我不知道模数陈述可能有什么问题。
为什么在我的系统上,在 IDE 的代码块和 NetBeans 上都出现了故障?
附言我知道代码在逻辑上是不正确的。
提前感谢!
计算 powerOf10
时整数溢出(这已经导致 UB)并变为负数。
不能将除法的余数乘以负数。
显然,10
永远不会溢出,因此您的测试不会表现出相同的行为。
如果使用new []
来分配内存,则需要使用 delete []
来释放它。所以:
delete digits;
应该是:
delete [] digits;
相关文章:
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 对单向链表进行排序时出现运行时错误
- 为什么此代码存在运行时错误?
- 你能解释一下什么运行时错误是如何解决它的吗?
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 为什么程序在 c++ 中迭代 emtpy 向量时会抛出运行时错误
- 运行时错误:引用绑定到类型为"int"的空指针
- 为什么当 vector 为空时会显示运行时错误?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 运行时错误:矢量下标超出范围:正在检查空集
- 分配给gslice_array会导致运行时错误
- cout 新创建的对象引发运行时错误
- C++在使用std::multimap时出现运行时错误的几率很小
- 运行时错误:引用绑定到类型"int"的未对齐地址0xbebebebebebebec6,这需要 4 个字节对齐 (stl_vector.h)
- 试图找出为什么我会收到运行时错误?
- 迭代二维矢量时发生运行时错误
- 调用 java 的回调() 时应用程序崩溃.由于 detatchThread 而获得运行时错误