#include<stdio.h>
void Ex_value(int* a, int *b);
void Max_Com(void); //最大公约数
void Max_Com(void); //最大公约数
void SN(void); //a+aa+aaa…
void Zero_Nub(void); //数后的零个数
void Mul_table(void); //九九乘法表
void Con_Sum(void); //连续数之和
void Divide_Pri(void); //分解质因数
void Perfect_Nub(void); //1000以内完美数
int main()
{
Max_Com();
return 0;
}
/* * * * * * * * * * * * * * * * */
/* * * 函数名:Ex_value * * * * */
/* * * 功能: 判断交换 * * * * */
/* * * * * * * * * * * * * * * * */
/* * * 函数名:Ex_value * * * * */
/* * * 功能: 判断交换 * * * * */
/* * * * * * * * * * * * * * * * */
void Ex_value(int* a, int *b)
{
if (*a < *b)
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
}
{
if (*a < *b)
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
}
/* * * * * * * * * * * * * * * * */
/* * * 函数名: Max_Com * * */
/* * * 功能: 最大公约数 * * */
/* * * * * * * * * * * * * * * * */
void Max_Com(void)
{
//方法一: 穷举法
int high, low, com;
printf("请输入两个正整数,例如:13 15\n");
scanf("%d %d", &high, &low);
/*
com = high;
for (; com > 0; com--)
{
if (!(high % com) && !(low % com))
break;
}
printf("最大公约数为%d\n", com);
*/
{
//方法一: 穷举法
int high, low, com;
printf("请输入两个正整数,例如:13 15\n");
scanf("%d %d", &high, &low);
/*
com = high;
for (; com > 0; com--)
{
if (!(high % com) && !(low % com))
break;
}
printf("最大公约数为%d\n", com);
*/
//方法二: 辗转相除法
/*
if (high < low)
{
Ex_value(&high, &low);
}
do
{
com = high % low;
high = low;
low = com;
Ex_value(&high, &low);
} while (low);
printf("最大公约数为%d\n", high);
*/
//方法三: 更相减损术
if (high < low)
{
Ex_value(&high, &low);
}
do
{
if (high == low)
{
break;
}
com = high - low;
high = low;
low = com;
Ex_value(&high, &low);
} while (!(high == low));
printf("最大公约数为%d\n", low);
}
if (high < low)
{
Ex_value(&high, &low);
}
do
{
if (high == low)
{
break;
}
com = high - low;
high = low;
low = com;
Ex_value(&high, &low);
} while (!(high == low));
printf("最大公约数为%d\n", low);
}
/* * * * * * * * * * * * * * * * */
/* * * 函数名: SN * * */
/* * * 功能: 求和 * * */
/* * * * * * * * * * * * * * * * */
/* * * 函数名: SN * * */
/* * * 功能: 求和 * * */
/* * * * * * * * * * * * * * * * */
void SN(void)
{
int nub, count, sum = 0, temp = 0;
printf("请输入两个1——9的正整数,例如:3 5\n");
scanf("%d %d", &nub, &count);
sum = temp = count;
for (; nub > 0; nub--, count *= 10, count += temp)
{
{
int nub, count, sum = 0, temp = 0;
printf("请输入两个1——9的正整数,例如:3 5\n");
scanf("%d %d", &nub, &count);
sum = temp = count;
for (; nub > 0; nub--, count *= 10, count += temp)
{
printf("%-5d", count);
sum += count;
}
printf("\n%-5d\n", sum);
}
sum += count;
}
printf("\n%-5d\n", sum);
}
/* * * * * * * * * * * * * * * * */
/* * * 函数名: Zero_Nub * * */
/* * * 功能:求末尾0的数目 * * */
/* * * * * * * * * * * * * * * * */
/* * * 函数名: Zero_Nub * * */
/* * * 功能:求末尾0的数目 * * */
/* * * * * * * * * * * * * * * * */
void Zero_Nub(void)
{
int nub, temp, count = 0;
printf("请输入一个正整数,例如:1000000\n");
scanf("%d", &nub);
if (nub)
{
temp = nub % 10;
while (!temp)
{
count++;
nub /= 10;
temp = nub % 10;
}
}
printf("这个数末尾有%d个0\n", count);
}
{
int nub, temp, count = 0;
printf("请输入一个正整数,例如:1000000\n");
scanf("%d", &nub);
if (nub)
{
temp = nub % 10;
while (!temp)
{
count++;
nub /= 10;
temp = nub % 10;
}
}
printf("这个数末尾有%d个0\n", count);
}
/* * * * * * * * * * * * * * * * */
/* * * 函数名: Mul_table * * */
/* * * 功能: 九九乘法表 * * */
/* * * * * * * * * * * * * * * * */
void Mul_table(void)
{
printf("打印九九乘法表\n");
int h, r;
h = r = 9;
for (; h > 0; h--)
{
for (r = h; r > 0; r--)
printf("%d * %d = %-8d", h, r, h*r);
printf("\n");
}
{
printf("打印九九乘法表\n");
int h, r;
h = r = 9;
for (; h > 0; h--)
{
for (r = h; r > 0; r--)
printf("%d * %d = %-8d", h, r, h*r);
printf("\n");
}
}
/* * * * * * * * * * * * * * * * */
/* * * 函数名: Con_Sum * * */
/* * * 功能: 连续数之和 * * */
/* * * * * * * * * * * * * * * * */
void Con_Sum(void)
{
int nub, sum = 0, temp = 1, add = 1, flag = 0;
/*
{
int nub, sum = 0, temp = 1, add = 1, flag = 0;
/*
temp , add决定从多少开始加
*/
printf("此函数用来求连续数,请输入一个数 :\n");
scanf("%d", &nub);
while (flag < 1000)
{
for (; sum < nub; temp++)
{
sum += temp;
}
if (sum == nub)
{
printf("%-d = ", sum);
int con = temp - 1;
for (; con > flag + 1; con--)
{
printf("%-d +", con);
}
printf("%d\n", con);
flag = 0;
break;
}
else
{
temp = ++add;
sum = 0;
flag++;
}
}
printf("此函数用来求连续数,请输入一个数 :\n");
scanf("%d", &nub);
while (flag < 1000)
{
for (; sum < nub; temp++)
{
sum += temp;
}
if (sum == nub)
{
printf("%-d = ", sum);
int con = temp - 1;
for (; con > flag + 1; con--)
{
printf("%-d +", con);
}
printf("%d\n", con);
flag = 0;
break;
}
else
{
temp = ++add;
sum = 0;
flag++;
}
}
}
/* * * * * * * * * * * * * * * * */
/* * * 函数名: Divide_Pri * * */
/* * * 功能: 分解质因数 * * */
/* * * * * * * * * * * * * * * * */
void Divide_Pri(void)
{
printf("分解质因数,请输入一个大于2的正整数\n");
int pri_arr[25], mark = 0;
int data = 2, com = 2;
int nub, flag1, flag2;
/* * * 函数名: Divide_Pri * * */
/* * * 功能: 分解质因数 * * */
/* * * * * * * * * * * * * * * * */
void Divide_Pri(void)
{
printf("分解质因数,请输入一个大于2的正整数\n");
int pri_arr[25], mark = 0;
int data = 2, com = 2;
int nub, flag1, flag2;
/*
data 数据集 从中筛选质数
com 用来比较的数
判断质因数
nub : 用户输入的数
flag1:用于暂存除法后的值
flag2:用于暂存求余后的值
*/
for (; data <= 100; data++)
{
for (com = 2; com < data / 2 + 1; com++)
{
if (!(data % com))
{
break;
}
}
if (com >= data / 2 + 1)
{
pri_arr[mark] = data;
mark++;
}
}
mark = 0;
//以上 将100 以内的质数存入 数组 此时mark = 0
scanf("%d", &nub);
printf("%d = ", nub);
while (mark < 25)
{
flag1 = nub / pri_arr[mark];
flag2 = nub % pri_arr[mark];
if (flag1 != 1&& !flag2)
{
printf("%d * ", pri_arr[mark]);
nub = flag1;
}
else if (flag1 = 1 && !flag2)
{
printf("%d\n", pri_arr[mark]);
mark = 0;
break;
}
else
mark++;
com 用来比较的数
判断质因数
nub : 用户输入的数
flag1:用于暂存除法后的值
flag2:用于暂存求余后的值
*/
for (; data <= 100; data++)
{
for (com = 2; com < data / 2 + 1; com++)
{
if (!(data % com))
{
break;
}
}
if (com >= data / 2 + 1)
{
pri_arr[mark] = data;
mark++;
}
}
mark = 0;
//以上 将100 以内的质数存入 数组 此时mark = 0
scanf("%d", &nub);
printf("%d = ", nub);
while (mark < 25)
{
flag1 = nub / pri_arr[mark];
flag2 = nub % pri_arr[mark];
if (flag1 != 1&& !flag2)
{
printf("%d * ", pri_arr[mark]);
nub = flag1;
}
else if (flag1 = 1 && !flag2)
{
printf("%d\n", pri_arr[mark]);
mark = 0;
break;
}
else
mark++;
}
}
}
/* * * * * * * * * * * * * * * * */
/* * * 函数名: Perfect_Nub * * */
/* * * 功能:求1000以内的完数* * */
/* * * * * * * * * * * * * * * * */
void Perfect_Nub(void)
{
int nub = 2, sum = 0;
int dividend;
/*
nub 源数据
sum 因数和
dividend 被除数
temp 用来暂存源数据
*/
nub 源数据
sum 因数和
dividend 被除数
temp 用来暂存源数据
*/
printf("1000以内完美数:\n");
for (; nub <= 1000; nub++) //源数据
{
for (sum = 0, dividend = 1; dividend < nub; dividend++) //被除数
{
if (!(nub % dividend))
{
sum += dividend;
}
}
if (sum == nub)
printf("%d\t", nub);
}
printf("\n\n");
}
for (; nub <= 1000; nub++) //源数据
{
for (sum = 0, dividend = 1; dividend < nub; dividend++) //被除数
{
if (!(nub % dividend))
{
sum += dividend;
}
}
if (sum == nub)
printf("%d\t", nub);
}
printf("\n\n");
}