一開始在想,不能用%符號,好像很難做
但又想想,不用除法,用乘法+陣列也可以做出來
PHP 語法:
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
main()
{
int no1,no2,a=0,b=0;
int an1[50]={0},an2[50]={0},an3[50]={0};
cout << "請輸入第一個數:";
cin >>no1;
cout << "請輸入第二個數:";
cin >>no2;
printf ("第一個數%d,二個數%d\n",no1,no2);
printf("=====%d====\t=====%d====\n",no1,no2);
for(int i=0;i<=no1;i++){
for(int j=0;j<=no2;j++){
if(no1==i*j){
printf ("%d X %d =%d\t",i,j,no1);
an1[a]=i;
an1[a+1]=j;
a=a+2;
}else if(no2==i*j){printf ("\t\t");}
if(no2==i*j){
printf ("%d X %d =%d\n",i,j,no2);
an2[b]=i;
an2[b+1]=j;
b=b+2;
}else if(no1==i*j){printf ("\n");}
}
}
printf("\n第一個數的因數:");
for(int i=0;i<=20;i++){
if (an1[i]!=0){
printf(" %d ",an1[i]);
}
}
printf("\n第二個數的因數:");
for(int i=0;i<=20;i++){
if (an2[i]!=0){
printf(" %d ",an2[i]);
}
}
//找出共同的因數放入an3陣列
for(int i=0;i<30;i++){
for(int j=0;j<30;j++){
if(an1[i]==an2[j]){an3[i]=an1[i];}
}
}
printf("\n\n%d和%d共同因數:",no1,no2);
for(int i=0;i<30;i++){
if (an3[i]!=0){
printf(" %d ",an3[i]);
}
}
//排序an3裡的,把最大數值放到an3[0]
int change;
for(int i=0;i<30;i++){
for(int j=0;j<30;j++){
if(an3[j]<an3[j+1]){
change=an3[j+1];
an3[j+1]=an3[j];
an3[j]=change;
}
}
}
printf("\n%d和%d的最大共因數為:%d\n",no1,no2,an3[0]);
printf("\n");
system("PAUSE");
return 0;
}
執行效果
PHP 語法:
請輸入第一個數:24
請輸入第二個數:42
第一個數24,二個數42
=====24==== =====42====
1 X 24 =24
1 X 42 =42
2 X 12 =24
2 X 21 =42
3 X 8 =24
3 X 14 =42
4 X 6 =24
6 X 4 =24
6 X 7 =42
7 X 6 =42
8 X 3 =24
12 X 2 =24
14 X 3 =42
21 X 2 =42
24 X 1 =24
第一個數的因數: 1 24 2 12 3 8 4 6 6 4 8 3 12 2 24 1
第二個數的因數: 1 42 2 21 3 14 6 7 7 6 14 3 21 2
24和42共同因數: 1 2 3 6 6 3 2 1
24和42的最大共因數為:6