レス番のレス番乗をのたまうスレ
■ このスレッドは過去ログ倉庫に格納されています
0087小牧愛佳 ◆u/3FmANAKA
2005/12/23(金) 15:44:31#define N 3000//3000桁
#define R 87//レス番(1から999まで可)
void check(short *d,int p){int k=p;while(d[k]>9){d[k]-=10;d[k+1]+=1;k++;}}
void main(void){int i,j,k;short *ans,*d;
static short a[3]={R%10,(R/10)%10,R/100};
static short m[10][10][2],n[10][10][2];
for(i=0;i<10;i++){for(j=0;j<10;j++){
m[i][j][0]=(i*j)%10;m[i][j][1]=(i*j)/10;
n[i][j][0]=(i+j)%10;n[i][j][1]=(i+j)/10;}}
ans = new short [N];d = new short [N];
for(i=0;i<3;i++) d[i]=a[i];for(i=3;i<N;i++) d[i]=0;
for(k=0;k<R-1;k++){for(i=0;i<N;i++)ans[i]=0;for(i=0;i<3;i++){
if(0!=a[i]){for(j=N-1;j>=0;j--){if(0!=d[j]){for(int h=0;h<2;h++){
ans[j+i+h+1]+= n[m[a[i]][d[j]][h]][ans[j+i+h]][1];
ans[j+i+h]= n[m[a[i]][d[j]][h]][ans[j+i+h]][0];
check(ans,j+i+h+1);}}}}}for(i=0;i<N;i++)d[i]=ans[i];}
int f=0;cout << endl;
for(i=N-1;i>=0;i--){if(0==ans[i] && 0==f)continue;
f++;cout << ans[i];if(0==f%60)cout<<endl;}cout<<endl;
delete[N] ans;delete[N] d;}
■ このスレッドは過去ログ倉庫に格納されています