C 三个连续数的乘积
我试图解决这个棘手的问题,但由于某种原因,我的代码出错了。。。我不知道为什么,但我会尽力解释 连续产品: 编写一个读取正整数的程序 从标准输入,并验证它是否等于三的乘积 自然数和连续数。例如,数字120相等 对于4x5x6,对于数字90,没有任何三个连续的自然值 乘积为90的数字。您的程序应该作为输出生成 如果有3个连续的自然数,其乘积为 值已读取,如果没有,则为“N” 这是我的代码:C 三个连续数的乘积,c,algorithm,loops,C,Algorithm,Loops,我试图解决这个棘手的问题,但由于某种原因,我的代码出错了。。。我不知道为什么,但我会尽力解释 连续产品: 编写一个读取正整数的程序 从标准输入,并验证它是否等于三的乘积 自然数和连续数。例如,数字120相等 对于4x5x6,对于数字90,没有任何三个连续的自然值 乘积为90的数字。您的程序应该作为输出生成 如果有3个连续的自然数,其乘积为 值已读取,如果没有,则为“N” 这是我的代码: #include <stdio.h> int main(){ int int1,i,co
#include <stdio.h>
int main(){
int int1,i,count=10,j,k,w=0;
scanf("%i",&int1);
for (i = 1; i <= count; ++i)
{
for (j = 1; j <= count+1; ++j)
{
for ( k = 1; k <= count+2; ++k)
{
if ((i==j+1 && i==k+2) && (i*j*k==int1)){
w=1;
}
}
}
}
if (w==0)
{
printf("N");
}
else{
printf("S");
}
}
#包括
int main(){
int int1,i,count=10,j,k,w=0;
scanf(“%i”和&int1);
对于(i=1;i)您可能想在这个问题上添加算法标签。换句话说,我的方法是考虑3个连续数字的乘积是什么。您可以把它写为x*(x+1)*(x+2)。但是还有更好的方法。
把它写成(x-1)*x*(x+1)。然后乘法和简化。结果是x^3-x
现在,对于任何给定的数字,从x=2开始在x上执行一个循环(因为如果x=1,那么x-1=0,这永远不会是一个解决方案)每个循环递增1。检查每个循环是否与输入编号匹配。如果匹配,则返回true。如果不匹配且超过输入编号,则返回false。如果不匹配且小于输入编号,则再次循环。您可能希望在这个问题上添加算法标记。也就是说,我的方法是要考虑3个连续数字的乘积是什么。你可以把它写成x*(x+1)*(x+1)。但是有更好的方法。< /P>
把它写成(x-1)*x*(x+1)。然后乘法和简化。结果是x^3-x
现在,对于任何给定的数字,从x=2开始在x上执行一个循环(因为如果x=1,那么x-1=0,这永远不会是一个解决方案)每个循环递增1。检查每个循环是否与输入编号匹配。如果匹配,则返回true。如果不匹配且超过输入编号,则返回false。如果不匹配且小于输入编号,则再次循环。您不需要3个循环。一种简单的方法是:
int test(int num)
{
for (int i = 1; i < num; i++)
{
int product = i * (i + 1) * (i + 2);
if ( product == num )
return true;
else if (product > num)
break;
}
return false;
}
int测试(int num)
{
for(int i=1;i数量)
打破
}
返回false;
}
您不需要3个循环。一个简单的方法是:
int test(int num)
{
for (int i = 1; i < num; i++)
{
int product = i * (i + 1) * (i + 2);
if ( product == num )
return true;
else if (product > num)
break;
}
return false;
}
int测试(int num)
{
for(int i=1;i数量)
打破
}
返回false;
}
我修改了您的代码。请告诉我问题是否仍然存在。所做的更改与WDS所说的完全一致
#include <stdio.h>
int main(){
int int1,i,count=10,j,k,w=0,comp;
scanf("%i",&int1);
for (i = 1; i <= count; ++i)
{
comp = i*(i+1)*(i+2);
if(comp==int1)
{
w = 1;
}
}
if (w==0)
{
printf("N");
}
else
{
printf("S");
}
return 0;
}
#包括
int main(){
int int1,i,count=10,j,k,w=0,comp;
scanf(“%i”和&int1);
对于(i=1;i我修改了您的代码。请告诉我问题是否仍然存在。所做的更改与WDS所说的完全一致
#include <stdio.h>
int main(){
int int1,i,count=10,j,k,w=0,comp;
scanf("%i",&int1);
for (i = 1; i <= count; ++i)
{
comp = i*(i+1)*(i+2);
if(comp==int1)
{
w = 1;
}
}
if (w==0)
{
printf("N");
}
else
{
printf("S");
}
return 0;
}
#包括
int main(){
int int1,i,count=10,j,k,w=0,comp;
scanf(“%i”和&int1);
对于(i=1;i您的过程似乎无效,请尝试查找素数因子,然后检查是否可以使用不同的倍数组合找到连续数。问题是什么?您希望您的程序不会输出什么?它似乎适用于您给出的示例。是的,我知道,这正是我非常困惑的原因…您的p进程似乎无效,请尝试查找素数因子,然后检查是否可以使用不同的倍数组合找到连续数。问题是什么?您希望您的程序不会输出什么?它似乎适用于您给出的示例。是的,我知道,这正是我非常困惑的原因…您声明的方式不是变量只有C++是正确的吗?它可能与C99:KEDIN,我来自C++背景,因此根据需要声明变量。但是严重的是,在C99中,它们是合法的。如果乘法溢出,该代码可能产生不准确的结果,如果<代码> Num < /C>大于最大,则产生<代码> s>代码>输出并符合数据类型。ent在您的情况下,无法找到此代码如何产生不准确的结果。测试产品==num仍然有效,因此识别N为S没有任何更改。循环以for条件(inum)终止。(现在,如果负num是另一种情况,但我假设调用方捕获该条件:)您能否详细说明代码是如何中断的?对于高num
,产品将溢出。考虑到大多数编译器如何处理溢出,产品将变为负数。然后随着i
变大,产品将再次变为正数,并可能恰好变为num
。请尝试使用num=139154728
,不应重新设置对于代码< > 2058 = <代码>,但它确实(假设32位<代码> int <代码>)。真正的值<代码> 2058×2059×2060 <代码>是代码> 8729089320 < /代码>,不适合于32位整数。您声明变量的方式仅对C++是正确的吗?它可能与C99:KEDIN,我来自C++背景,因此根据需要声明变量。但是严重的是,在C99中,它们是合法的。如果乘法溢出,该代码可能产生不准确的结果,如果<代码> Num < /C>大于最大,则产生<代码> s>代码>输出并符合数据类型。ent在您的情况下,无法找到此代码如何产生不准确的结果。测试产品==num仍然有效,因此识别N为S没有任何更改。循环终止于for条件(inum)。(现在,如果负num是另一种情况,但我假设