【发布时间】:2020-05-22 12:59:45
【问题描述】:
所以我写了一个代码来检查一个长整数是否是史密斯,但我不断收到浮点异常:8,无论我修复我的变量的大小。不太确定我错过了什么。
#include <iostream>
bool isPrime(long int k) {
if (k == 1) return false;
for (long int i = 2; i*i < k; i++)
if (k % i == 0)
return false;
return true;
}
int main(){
long int n;
std::cin >> n;
long int sumPr = 0, sumCif = 0;
while (n > 0) {
sumCif += n % 10;
n = n/10;
}
for (long int i = 0; i*i<=n/2; i++) {
if (isPrime(i)) {
while (n % i == 0){
long int p = i;
while (p > 0) {
sumPr += (p % 10);
p = p/10;
}
n = n/i;
}
}
}
if (sumPr == sumCif) std::cout << "1" ; else std::cout << "0";
return 0;
}
【问题讨论】:
-
n = n/i- 这里可能被零除。 -
请注意,您的
isPrime对于素数平方将失败。 -
您的
isPrime为0返回true。这意味着您在n=n/i;上除以0
标签: c++ number-theory