# 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");
}
}
}
```