【OJ】1089: 醜數
阿新 • • 發佈:2018-11-29
詳盡程式碼和說明如下:
#include<stdio.h> long long min(long long&a, long long &b,long long &c,long long&d) { long long m = (a>b)?b:a; long long n = (c>d)?d:c; return (m>n)?n:m; } int main() { long long * a = new long long[5843]; a[0] = 1; // 由第一個醜數依次生成後面的醜數 (醜數只能由醜數產生) int t2 = 0; // 相當於一個指標 int t3 = 0; int t5 = 0; int t7 = 0; long long L2,L3,L5,L7; for(int i=1;i<5843;i++){ L2 = a[t2]*2; L3 = a[t3]*3; L5 = a[t5]*5; L7 = a[t7]*7; a[i] = min(L2,L3,L5,L7); // 由當前醜數生成的下一個醜數 下面的是關鍵程式碼 while(a[t2]*2<=a[i]){ t2++; } while(a[t3]*3<=a[i]){ t3++; } while(a[t5]*5<=a[i]){ t5++; } while(a[t7]*7<=a[i]){ t7++; } } int n = 0; while(scanf("%d",&n)!=EOF){ if(n==0)break; if(n%100>=11&&n%100<=13){ // 小心輸出格式 這裡我犯了錯 所以指出來 printf("The %dth humble number is %d.\n",n,a[n-1]); continue; }else if(n%10==1){ printf("The %dst humble number is %d.\n",n,a[n-1]); continue; }else if(n%10==2){ printf("The %dnd humble number is %d.\n",n,a[n-1]); continue; }else if(n%10==3){ printf("The %drd humble number is %d.\n",n,a[n-1]); continue; }else{ printf("The %dth humble number is %d.\n",n,a[n-1]); } } delete[] a; return 0; }
應當說明一點的是,我發現那個最大的醜數並沒有超過int型別的最大範圍,所以可以將程式中的long long 型別換成int型別!
int的最大值是2147483647.