2007-02-19

【Q443】Humble Numbers

題目: http://acm.uva.es/p/v4/443.html

說明:
  應該是目前做ACM花最久時間Debug的一題>"<
  這題應該要注意型態必須用logn long int才能完整表達正確數值,再來就是英文數值的表達...(得承認我英文不好)113的序數應該表達成113th而不是113rd(113必須拆成100+13,其中13是13th所以是113th,尾數11~13亦然...)。

程式下載:http://yaushung.googlepages.com/2007021901.c

程式內容:

#include <stdio.h>

long long number[5842] = {1, 2, 3, 4, 5, 6, 7} ;

long long humble(int order) ;

static int count = 6 ;

int main() {
int input, test ;
while(1) {
scanf("%d", &input) ;
if(input == 0)
break ;
printf("The %d", input) ;
if((input%100 - input%10) == 10)
printf("th") ;
else {
test = input % 10 ;
if(test == 1)
printf("st") ;
else if(test == 2)
printf("nd") ;
else if(test == 3)
printf("rd") ;
else

printf("th") ;
}
printf(" humble number is %lld.\n", humble(input)) ;
}
return 0 ;
}

long long humble(int order) {
long long temp ;
int i, j ;
long long min ;
order-- ;
if(order <= count)
return number[order] ;
while(count < order) {
min = 0 ;
for(i=0 ; i<count ; i++) {
temp = number[i] * 7 ;
if(temp <= number[count])
continue ;
else if(min>temp min==0)
min = temp ;
temp = number[i] * 5 ;
if(temp <= number[count])
continue ;
else if(min>temp min==0)
min = temp ;
temp = number[i] * 3 ;
if(temp <= number[count])
continue ;
else if(min>temp min==0)
min = temp ;
temp = number[i] << 1 ;
if(temp <= number[count])
continue ;
else if(min>temp min==0)
min = temp ;
}
number[++count] = min ;
}
if(count<order)
count = order ;
return number[order] ;
}

沒有留言: