程式如下。
那個回圈的部分,外層回圈只會進行一次就結束了,內層回圈能正常運行,然后特別詭異的是如果我把注釋掉的那行輸出加進去又能恢復正常。啥情況???
#include<stdio.h>
int main()
{
int gcd(int a0,int b0);
int num;
int max=0,max0=0;
int i=1,j;
int g;
scanf("%d",&num);
for(i=1;i<=num;i++)
{
for(j=i;j<=num;j++)
{ /*printf("\n%d %d\n",i,j);*/
g=gcd(i,j);
max0=(i*j)/g-g;
if(max<max0)max=max0;
}
}
printf("%d",max);
return 0;
}
int gcd(int a0,int b0)
{ int temp;
while(temp!=0)
{
temp=a0%b0;
a0=b0;
b0=temp;
}
return a0;
}
uj5u.com熱心網友回復:
int gcd(int a0,int b0){ int temp; ===》》 這里temp沒有初始化,不知道是什么值
while(temp!=0) ==》》 導致這里的回圈判斷出現問題 解決辦法是給 temp 賦個不等于0的初值
{
temp=a0%b0;
a0=b0;
b0=temp;
}
return a0;
}
uj5u.com熱心網友回復:
int gcd(int a0,int b0)
{
//int temp;
int temp = 1;
while(temp!=0)
{
temp=a0%b0;
a0=b0;
b0=temp;
}
return a0;
}
供參考~
問題可能不在回圈上,而是gcd函式內temp的沒初始化上。
改成如下:
int gcd(int a0,int b0)
{
int temp;
#if 1
do {
temp = a0 % b0;
a0 = b0;
b0 = temp;
}while (temp);
#else
while(temp!=0)
{
temp=a0%b0;
a0=b0;
b0=temp;
}
#endif
return a0;
}
uj5u.com熱心網友回復:
但是為什么我加上那個輸出就可以很神奇的正常執行了uj5u.com熱心網友回復:
但為什么我加了個輸出就特別神奇的可以正常運行了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/95822.html
標籤:C語言
上一篇:template模版類
下一篇:c++可以用wsh腳本代碼么?
