如題,小妹百思不得其解,為甚麼計算到n=5就開始錯了><,懇請各路高手幫忙解惑,謝謝!
設陣列是為了使處理的數值範圍更大。
初探程式語言,還請各位多多指教,例如編寫建議等。
#include
using namespace std;
int main()
{
int a,n,v,s,i,b;
int x[500000];
while(true)
{
cout<<"請輸入一個整數 =";
cin>>n;
v=0;
s=1;//紀錄幾位數
x[0]=1;
for(a=1;a<=n;a++)//使123......*n
{
for(i=0;i<s;i++)
{
x[i]=x[i]*a+v;//v用來記錄進位值
v=x[i]/10 ;
x[i]=x[i]%10;
if(v!=0&&i+1==s)
s++;
}
}
cout<<"1x...x"<<n<<"="<<endl;
for(b=s-1;b>=0;b--)//使x陣列降冪排列
cout<<x[b];
cout<<endl;
}
}
我測正常,很好呀...
算30!都不會錯
#include <iostream>
using namespace std;
int main() {
int a,n,v,s,i,b;
int x[500000];
//while(true) {
//cout<<"請輸入一個整數 =";
//cin>>n;
n=30;
v=0;
s=1;//紀錄幾位數
x[0]=1;
for(a=1;a<=n;a++) { //使123......*n
for(i=0;i<s;i++) {
x[i]=x[i]*a+v; //v用來記錄進位值
v=x[i]/10 ;
x[i]=x[i]%10;
if(v!=0&&i+1==s)
s++;
}
}
cout<<"1x...x"<<n<<"="<<endl;
for(b=s-1;b>=0;b--) {//使x陣列降冪排列
cout<<x[b];
}
cout<<endl;
}
//}
$g++ -o main *.cpp
$main
1x...x30=
265252859812191058636308480000000
試了一下他應該是執行第二次輸入以後會出錯, 因為上一次計算的資料沒有清空
原來如此
我用 www.tutorialspoint.com 測試
就偷懶把那個無窮迴圈給 remark 掉
找到問題點了
謝謝!!!那想再請教,要如何清空資料?我的目的是為了可以重複輸入。
#include <iostream>
#include <string.h>
using namespace std;
int main() {
int a,n,v,s,i,b;
int x[500000];
while(true) {
//設定初值
cout<<"請輸入一個整數 =";
cin>>n;
v=0;
s=1;//紀錄幾位數
memset(x, 0, sizeof(x)); //清空 x 陣列
x[0]=1;
for(a=1;a<=n;a++) { //使123......*n
for(i=0;i<s;i++) {
x[i]=x[i]*a+v; //v用來記錄進位值
v=x[i]/10 ;
x[i]=x[i]%10;
if(v!=0&&i+1==s)
s++;
}
}
cout<<"1x...x"<<n<<"="<<endl;
for(b=s-1;b>=0;b--) {//使x陣列降冪排列
cout<<x[b];
}
cout<<endl;
}
}
請輸入一個整數 =1x...x5=
120
請輸入一個整數 =1x...x10=
3628800
請輸入一個整數 =1x...x15=
1307674368000
請輸入一個整數 =1x...x20=
2432902008176640000
請輸入一個整數 =1x...x25=
15511210043330985984000000
請輸入一個整數 =1x...x30=
265252859812191058636308480000000
再次感謝!