我们设法达到此代码但我们无法完成它。
#include <stdio.h>
main()
{
int i = 10, j, c, sum, b, x, d, e, z, f, g;
printf("\nPrime numbers from 10 to 99 are the follwing:\n");
while (i <= 99)
{
c=0;
for (j = 1; j <= i; j++)
{
if (i % j == 0) c++;
}
if (c == 2)
{
b = i;
d = b / 10;
e = b - (10 * d);
x = (e * 10) + d;
{
z = 0;
f = x;
for (j = 1; j <= f; j++)
{
if (f % j == 0) z++;
}
if (z == 2)
{
printf("%d %d\n", i, f);
}
}
}
i++;
}
getch();
}
我的问题是如何添加所有 f s ..
答案应该是429。
我怎样才能添加所有f?
答案 0 :(得分:7)
为什么不将代码分解为某些功能:
bool isPrime(int number)
检查数字是否为素数。int reverse(int number)
可以撤消此号码。然后算法将是:
sum = 0;
for (i = 2; i <= 99; ++i)
if (isPrime(i) && isPrime(reverse(i)))
sum += i;
答案 1 :(得分:1)
在开始时初始化sum = 0;
。然后,在您的printf
旁边计算素数:sum += i;
。然后你可以在最后打印出来。
答案 2 :(得分:1)
如果这是一个基本的编程类,你只对结果感兴趣,那么这将使你到那里,但是如果它是算法类,那么你可能想看看Sieve of Eratosthenes。
您可能还想考虑是什么使2位数字与另外2位数字相反,以及您将如何表达。
答案 3 :(得分:1)
您的代码中存在许多问题。它们都不会阻止编译,它们都不会导致输出问题。我首先会告诉你如何获得你想要的结果然后突出问题。
这是你的代码,修改为sum fs。每次打印满足条件的素数时,您只需要将f加到总和中。最后,你应该打印所有fs的总和。
#include <stdio.h>
//Use int as the return type explicitly!
int main()
{
int i=10,j,c,sum,b,x,d,e,z,f,g;
printf("\nPrime numbers from 10 to 99 are the follwing:\n");
//Set the sum of all primes whose reverse are also primes to zero
sum = 0;
while(i<=99)
{
//c is tyhe number of factors.
c=0;
for(j=1;j<=i;j++)
{
if(i%j==0)
c++;
}
//If there are only two factors.
//Two factors (1 and itself) => Prime
if(c==2)
{
//Reverse i and store it in x
b=i;
d=b/10;
e=b-(10*d);
x=(e*10)+d;
//Curly braces unnecessary
{
//Check if the reverse i.e. x is prime
//z is the number of factors
z=0;
//f is the number being tested for primality.
f=x;
for(j=1;j<=f;j++)
{
if(f%j==0)
z++;
}
//If f i.e. x i.e. the reverse has only two factors
//Two factors (1 and itself) => Prime
if(z==2)
{
//print the prime number.
printf("%d %d \n",i,f);
//Add f to the sum
sum += f;
}//if(z==2)
}//Unnecessary braces
}//if(c==2)
i++;
}//end while
//print the number of reversed primes!!
//That is sum of the reversed values of numbers satisfying the
//condition!
printf("\nThe sum is:%d\n", sum);
//getch() is non standard and needs conio.h
//Use getchar() instead.
//Better solution needed!!
getchar();
//Return 0 - Success
return 0;
}
输出
...@...-desktop:~$ gcc -o temp temp.c ...@...-desktop:~$ ./temp Prime numbers from 10 to 99 are the follwing: 11 11 13 31 17 71 31 13 37 73 71 17 73 37 79 97 97 79 The sum is:429 ...@...desktop:~$
请注意代码中的所有注释(上文)。此外,请考虑执行以下操作:
在个人层面上,我试图找到最佳解决方案。我希望你也会尝试这样做。我试图帮助你,而不是全部放弃。
我希望这会有所帮助。
注意强>
我建议检查最多为num / 2的除数。我根据vartec的建议将其修改为sqrt(num)。