如題,代碼:
#include<stdio.h>
#include<math.h>
int fn(int a,int n);//函式宣告
int main(void){
int a,n,sum;
int i;
sum=0;
scanf("%d %d",&a,&n);
//輸入a,n
for(i=1;i<=n;i++){
sum+=fn(a,i);//回圈 完成累加
}
printf("Sum=%d",sum);
return 0;
}
int fn(int a,int n)
{
int result=0;
for(int i=0;i<n;i++)
{
result=result+a*pow(10,i);//pow(2,3)表示2的3次
}
return result;
}
在DEV C++上輸出的是Sum=98756
在VS 2019上輸出的是Sum=98760
我想要的結果是Sum=98760,但學校用的是DEV的編譯器。
兩個編譯器是在哪一步處理不同導致結果不一樣的啊?
求大佬相助!!!!
uj5u.com熱心網友回復:
結果應該是確定的。不一樣,說明代碼有問題,需要修改。。
你也不說要完成什么功能,誰也幫不了你。。。
uj5u.com熱心網友回復:

題目是這個。
uj5u.com熱心網友回復:
修改如下,供參考:#include<stdio.h>
#include<math.h>
int fn(int a,int n);//函式宣告
int main(int argc, char* argv[])
{
int a,n,sum;
int i;
sum=0;
scanf("%d %d",&a,&n); //輸入a,n
for(i=1;i<=n;i++){
sum+=fn(a,i);//回圈 完成累加
}
printf("Sum=%d",sum);
system("pause");
return 0;
}
int fn(int a,int n)
{
int result=0;
for(int i=0;i<n;i++){
result += a*pow(10,i);//pow(2,3)表示2的3次
}
return result;
}
uj5u.com熱心網友回復:
前面這個是樓主的代碼,是正確的。這個是修改的,另一種寫法,供參考:#include<stdio.h>
int fn(int a,int n);//函式宣告
int main(int argc, char* argv[])
{
int a,n,sum;
int i;
sum=0;
scanf("%d %d",&a,&n); //輸入a,n
for(i=1;i<=n;i++){
sum+=fn(a,i);//回圈 完成累加
}
printf("Sum=%d\n",sum);
system("pause");
return 0;
}
int fn(int a,int n)
{
int result=0;
for(int i=0;i<n;i++){
//result += a*pow(10,i);//pow(2,3)表示2的3次
result = result * 10 + a;
}
return result;
}
uj5u.com熱心網友回復:
Show一個,僅供參考:#include <stdio.h>
int fn(int a, int n)
{
if(n == 1) return a;
else return a * (10 * fn(1, n-1) + n);
}
int main(void)
{
int a, n;
scanf("%d %d",&a, &n);
printf("Sum=%d", fn(a, n));
return 0;
}
uj5u.com熱心網友回復:
第四行是什么意思啊?
uj5u.com熱心網友回復:
題目已發,幫忙看看吧
uj5u.com熱心網友回復:
第5樓,我寫的,僅供參考。
uj5u.com熱心網友回復:
大佬,你那個遞回函式怎么想出來的啊?
uj5u.com熱心網友回復:
結果應該是確定的。
不一樣,說明代碼有問題,需要修改。。
你也不說要完成什么功能,誰也幫不了你。。。
題目已發,幫忙看看吧
第5樓,我寫的,僅供參考。
大佬,你那個遞回函式怎么想到的啊?求思路!

uj5u.com熱心網友回復:
除非必要,這種問題不要使用浮點數,pow庫函式是浮點值。不同的編譯器參考不同的庫。你以為double的精度足夠,但是須知以浮點規范來說0.999999999999999也是整數1的足夠精度的近似,但是一旦賦值給整型,它就等同于0了。
uj5u.com熱心網友回復:
除非必要,這種問題不要使用浮點數,pow庫函式是浮點值。不同的編譯器參考不同的庫。
你以為double的精度足夠,但是須知以浮點規范來說0.999999999999999也是整數1的足夠精度的近似,但是一旦賦值給整型,它就等同于0了。
但是這個算出來是都整數哇,應該不影響吧
uj5u.com熱心網友回復:
你要是堅持用的話,可以把所有中間程序都表達為double,不使用int,避免截斷誤差回圈累積。僅僅在最后輸出前把結果+0.5再取整以四舍五入。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/232781.html
標籤:C語言
上一篇:萌新求助
