* | dowdow | a040. 阿姆斯壯數 | AC (88ms) | ||
* | VacationClub | a040. 阿姆斯壯數 | AC (16ms) | ||
* | polarbear | a040. 阿姆斯壯數 | AC (12ms) |
在下的程式碼如同下方,請問要修正哪些地方或則使用哪種方法才能跑的像polarbear或VacationClub兩位高手這麼快?
#include <stdio.h>
int i,j,n,b,s,k,m[7],o,p,x;
int main()
{
while(scanf("%d %d",&s,&b)!=EOF){
n=0;
for(i=s;i<=b;i++){
k=0;o=i;
while(o>0){
m[k]=o%10;
o=o/10;
k++;
}
for(j=0;j<k;j++){
x=1;
for(p=0;p<k;p++){x=x*m[j];}
o=o+x; }
if(i==o){printf("%d ",i);n++;}
}
if(n==0){printf("none\n");}else{printf("\n");}
}
return 0;
}
先將1~1000000之間的Armstrong number放到陣列裡
由於才20個,就直接arm[20]={1,2, ... , 153, 370, 371, 407, ... }
這樣應該就超快的
---------------------------------------------------------------
這樣的方式,是允許的嗎?
若不使用這樣的方法,該如何處理兩個for loop
才不會逾時?請高手指點,謝謝!
* | dowdow | a040. 阿姆斯壯數 | AC (88ms) | ||
* | VacationClub | a040. 阿姆斯壯數 | AC (16ms) | ||
* | polarbear | a040. 阿姆斯壯數 | AC (12ms) |
在下的程式碼如同下方,請問要修正哪些地方或則使用哪種方法才能跑的像polarbear或VacationClub兩位高手這麼快?
#include
int i,j,n,b,s,k,m[7],o,p,x;
int main()
{
while(scanf("%d %d",&s,&b)!=EOF){
n=0;
for(i=s;i<=b;i++){
k=0;o=i;
while(o>0){
m[k]=o%10;
o=o/10;
k++;
}
for(j=0;j x=1;
for(p=0;p o=o+x; }
if(i==o){printf("%d ",i);n++;}
}
if(n==0){printf("none\n");}else{printf("\n");}
}
return 0;
}
現在跑才8ms喔