# 502 數字相乘 ``` 請撰寫一程式,讓使用者輸入一個1~9位數的數字,輸出每一個數字相乘的算式及結果。 輸入說明 一個1~9位數的數字 輸出說明 每一個數字相乘的算式及結果 範例輸入1 57326 範例輸出1 5*7*3*2*6=1260 範例輸入2 0 範例輸出2 0=0 #include <stdio.h> #define LEN 10 int main() { int n; scanf("%d", &n); if (n==0) { printf("%d=%d", n, n); } else { int x[LEN]; int result = 1, i=0; while(n != 0) { x[i] = n % 10; i++; result *= n % 10; n /= 10; } for (int j=i-1; j>0; --j) { printf("%d*", x[j] ); } printf("%d=%d", x[0], result); } } ``` # 504 迴文數 ``` 請撰寫一程式,讓使用者輸入一正整數,判斷是否為迴文數,若是,請輸出「Yes」;若不是,請輸出「No」。 迴文數:此數的數字按相反的順序重新排列後,所得到的數和原來的數一樣。 輸入說明 一個正整數 輸出說明 判斷是否為迴文數 範例輸入1 14641 範例輸出1 Yes 範例輸入2 25523 範例輸出2 No #include <stdio.h> #define LEN 10 int main() { int n; scanf("%d", &n); int x[LEN]; int i=0; while(n != 0) { x[i] = n % 10; i++; n /= 10; } for (int j=0; j<i/2; ++j) { if (x[j] != x[i-j-1] ) { printf("%s", "No"); return 0; } } printf("%s", "Yes"); } #include <stdio.h> #define LEN 10 int *compute(int, int *); int main() { int n; scanf("%d", &n); int i=0; int *y=compute(n, &i); for (int j=0; j<i/2; ++j) { if (y[j] != y[i-j-1] ) { printf("%s", "No"); return 0; } } printf("%s", "Yes"); } int *compute(int n, int *i) { static int x[LEN]; while(n != 0) { x[*i] = n % 10; (*i)++; n /= 10; } return x; } ``` # 506 質因數分解 ``` 請撰寫一程式,讓使用者輸入一個正整數,輸出該數的質因數分解式子,質因數請由小而大相乘;若為質數,請輸出「-1」。 輸入說明 一個正整數 輸出說明 該數的質因數分解式子,若為質數,請輸出「-1」 範例輸入1 360 範例輸出1 2*2*2*3*3*5 範例輸入2 2 範例輸出2 -1 https://www.796t.com/content/1545591851.html #include <stdio.h> #include <math.h> int main() { unsigned long n; int j=0; scanf("%lu", &n); for (int i=2; i<=sqrt(n); ++i) { while (n!=i) { if (n%i==0) { j=1; printf("%d*",i); n/=i; } else break; } } if (j) printf("%lu\n",n); else printf("%d", -1); } ``` # 508 二進位運算 ``` 請撰寫一個程式,讓使用者輸入兩個8位元的二進位字串,分別輸出兩字串以十進位、二進位相加的結果,若二進位相加超出位元顯示範圍,皆以「11111111」表示。 輸入說明 兩個二進位字串 輸出說明 兩字串以十進位、二進位相加的結果 範例輸入1 11001100 00010010 範例輸出1 204 + 18 = 222 11011110 範例輸入2 11111011 10010011 範例輸出2 251 + 147 = 398 11111111 #include <stdio.h> int binaryToDecimal(int); int decimalToBinary(int); int main() { int n1, n2; scanf("%d %d", &n1, &n2); int a1=binaryToDecimal(n1); int a2=binaryToDecimal(n2); int b=a1+a2; printf("%d + %d = %d\n", a1, a2, b); printf("%d", decimalToBinary(b) ); } int binaryToDecimal(int n) { int x=0, i=1; while (n!=0) { x += (n % 10)*i; n /= 10; i *= 2; } return x; } int decimalToBinary(int n){ if (n>=255) return 11111111; int x=0, i=1; while (n!=0) { x += (n % 2)*i; n /= 2; i *= 10; } return x; } ``` # 510 星號輸出 ``` 請撰寫一程式,讓使用者輸入兩個正整數n、m,代表n*m矩陣。在矩陣內各別輸入0或1,若矩陣最外圍的輸入為1,則輸出符號「*」;若1的上下左右有其一為0,亦輸出符號「*」;其餘則以半形空格表示,最後將結果輸出在畫面上。 輸入說明 兩個正整數n、m及n*m矩陣中的所有元素(只有0和1) 輸出說明 轉換後的結果 範例輸入 4 7 0 0 0 1 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 範例輸出 * * * * * ******* 程式輸出擷圖 下圖中的 黃色點 為 空格 #include <stdio.h> int main() { int n1, n2; scanf("%d %d", &n1, &n2); int x[n1][n2]; for (int i=0; i<n1; ++i) { for (int j=0; j<n2; ++j) scanf("%d", &x[i][j]); } for (int i=0; i<n1; ++i) { for (int j=0; j<n2; ++j) { if (x[i][j]==0){ printf("%s", " "); } else { if (j==0 || j==n2-1 || i==0 || i==n1-1){ printf("%s", "*"); } else if (x[i][j] != x[i][j-1]){ printf("%s", "*"); } else { if (x[i][j] != x[i][j+1]){ printf("%s", "*"); } else { printf("%s", " "); } } } } puts(""); } } ``` # 602 字串拆解 ``` 請撰寫一程式,讓使用者輸入一個包含英文大小寫的字串,並依序將字串中的大、小寫字母分離,最後依序輸出字串中的大寫字串、小寫字串及大寫字母的數量。 輸入說明 一個包含英文大小寫的字串 輸出說明 字串中的大寫字串、小寫字串及大寫字母的數量 範例輸入 ComPuTer 範例輸出 CPT omuer 3 #include <stdio.h> #include <string.h> #define LEN 20 int main() { char x[LEN], y[LEN]; scanf("%s", x); int j=0, k=0; for (int i=0; i<strlen(x); ++i) { if (x[i]<97){ printf("%c", x[i]); j++; } else { y[k] = x[i]; k++; } } puts(""); for (int i=0; i<k; ++i) printf("%c", y[i]); printf("\n%d", j); } ``` # 604 選擇排序 ``` 請撰寫一程式,讓使用者輸入九個整數,請輸出由小而大排序後的結果及其總和。 輸入說明 九個整數 輸出說明 由小而大的排序結果及總和 範例輸入 8 9 5 4 3 2 1 6 7 範例輸出 1 2 3 4 5 6 7 8 9 sum = 45 #include <stdio.h> #define LEN 9 int main() { int x[LEN]; for (int i=0; i<LEN; ++i) scanf("%d", &x[i]); for (int k=0; k<LEN-1; ++k) { for (int i=0; i<LEN-1; ++i) { int j; if (x[i]>x[i+1]) { j = x[i]; x[i] = x[i+1]; x[i+1] = j; } } } int a=0; for (int k=0; k<LEN; ++k) { printf("%d\n", x[k]); a += x[k]; } printf("sum = %d", a); } ``` # 606 檢驗學號 ``` 1. 請撰寫一程式,讓使用者輸入三組學號,學號總共有6個字元,由左至右分別以s0~s5表示,s0~s4均是數字;s5是大寫英文字母的檢查碼。 2. s5的判斷規則:若公式「((s0+s2+s4)+(s1+s3)*5)%26」的計算結果為1,則s5為A;若計算結果為2,則s5為B,以此類推。請依序判斷使用者輸入的學號是否正確,正確則輸出「Pass」,否則輸出「Fail」。 提示:數字「0」的ASCII碼=48,英文字母「A」的ASCII碼=65。 輸入說明 三組學號 輸出說明 三組學號是否合法 範例輸入 12345M 55237B 03805A 範例輸出 Pass Pass Fail #include <stdio.h> #define LEN 6 int main() { char x[3][LEN]; for (int i=0; i<3; ++i){ scanf("%6s", &x[i][0]); } int sum; for (int i=0; i<3; ++i){ sum=0; for (int j=0; j<LEN-1; j+=2){ sum += x[i][j]-48; } for (int j=1; j<LEN-1; j+=2){ sum += (x[i][j]-48)*5; } if (sum%26 == x[i][LEN-1]-64){ printf("%s\n", "Pass"); } else { printf("%s\n", "Fail"); } } } ```