【c++ | 谭浩翔】第三章练习
【P81 第15题】
//【P81 第15题】
#include <iostream>
using namespace std;
int main()
{
//定义模块
int m , n , o , p , temp;
//展示模块
cout << "求最大公约数和最小公倍数" << '\n' << "请输入两个正整数m和n:";
cin >> m >> n;
//算法模块
o = m; //输入赋新值计算,以免之后输出混乱
p = n;
for (temp = 1; temp != 0;) //求最大公约数(辗转相除法)
{
temp = o % p;
if (temp != 0)
{
o = p;
p = temp;
}
else
break;
}
o = m * n / p; //求最小公倍数(最小公倍数=两整数的乘积÷最大公约数)
//结果模块
cout << "它们的最大公约数为:" << p << endl;
cout << "它们的最小公倍数为:" << o << endl;
return 0;
}
【P81 第16题】
//【P81 第16题】
#include <iostream>
using namespace std;
int main()
{
//定义模块
int a = 0, b = 0, c = 0, d = 0;
char x;
//展示模块
cout << "请输入一行字符:" << endl;
//算法模块
while ((x = getchar()) != '\n') //遍历算法
{
if (x >= 'a' && x <= 'z' || x >= 'A' && x <= 'Z')
a++;
else
if (x == ' ')
b++;
else
if (x >= '0' && x <= '9')
c++;
else
d++;
}
//结果模块
cout << "统计结果如下:" << '\n' << "英文字母字符的个数为:" << a << '\n' << "空格字符的个数为:" << b << '\n' << "数字字符的个数为:" << c << '\n' << "其他字符的个数为:" << d << endl;
return 0;
}
【P81 第17题】
//【P81 第17题】
#include <iostream>
using namespace std;
int main()
{
//定义模块
long a = 0 , b = 0 ,c = 0 , n = 0 , i;
//展示模块
cout << "请输入a与n:" << endl;
cin >> a >> n;
//算法模块
b = a; //这里转新赋值作为之后结果c的个位数
for (i = 1 ; i < n ; i++) //当n不为0时,进行累加的循环运算
{
if (n > 0)
{
a = a * 10;
a = a + b;
}
c = c + a;
}
if (n == 0)
c = 0; //当n为0时,c为0
else
c = c + b; //当n不为0时,c为累加后的数加上转新赋值的数b
//结果模块
cout << c << endl;
return 0;
}
【P81 第18题】
//【P81 第18题】
#include <iostream>
using namespace std;
int main()
{
//定义模块
long long m = 1; //这里定义m为超长整型以能真实表达结果
int n = 1 , i; //这里定义i和n为整型以减少程序运行时所占用的内存
//算法模块
for (i = 1; i <= 20; i++,n++) //通过20次for循环来计算20的阶乘
{
m = n * m;
}
//结果模块
cout << m << endl;
return 0;
}
【P81 第19题】
//【P81 第19题】
#include <iostream>
using namespace std;
int main()
{
//定义模块
int x , y , z , i;
//展示&算法模块
cout << "这是所有的水仙花素:" << endl;
for (i = 100; i <= 999; i++) //“求水仙花数”算法在三位数中循环运行
{
x = i / 100; //取三位数的百位数
y = i / 10 - i / 100 * 10; //取三位数的十位数
z = i % (x * 10 + y); //取三位数的个位数
if(i == x * x * x + y * y * y + z * z * z) //如果是水仙花素则输出
cout << i << '\t';
}
return 0;
}
【P81 第20题】
//【P81 第20题】
#include <iostream>
using namespace std;
int main()
{
//定义模块
int x , y , i;
//算法&结果模块
for (x = 1; x < 1000; x++) //在1000以内循环寻找完数
{
y = 0; //这里需要局部变量初始化
for (i = 1; i < x; i++) //计该数的因子数
{
if ((x % i) == 0)
y += i;
}
if (y == x) //判断完数
{
cout << x << ",its factors are ";
for (i = 1; i < x; i++) //输出该数所有因子
{
if (x % i == 0)
cout << i << " ";
}
cout << endl;
}
}
return 0;
}