---
# System prepended metadata

title: 502 數字相乘

---

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