int main()
{
long n = 0;
long m = 0;
scanf("%ld%ld", &n, &m);
//求gcd
long gcd = 0;
long i = 0;
//判断min
long min = n < m ? n : m;
for (i = min; i >= 1; i--)
{
if (n % i == 0 && m % i == 0)
{
gcd = i;
break;
}
}
//求lcm,因为 gcd * lcm = n * m
long lcm = n * m / gcd;
//求和
long sum = gcd + lcm;
printf("%ld\n", sum);
return 0;
}
--辗转相除法(欧几里得算法):
cpp复制代码
int main()
{
long int n = 0;
long int m = 0;
long gcd = 0;
while (scanf("%ld %ld", &n, &m) == 2)
{
//保留原始值
long i = n;
long j = m;
//辗转相除法
while (m != 0)
{
long tem = m;
m = n % m;
n = tem;
}
gcd = n;
//求lcm,因为 gcd * lcm = n * m
long lcm = i * j / gcd;
//求和
long sum = gcd + lcm;
printf("%ld\n", sum);
}
return 0;
}
解题思路------
--对于辗转相除法的好处就是,显著提升了代码运行效率,还有就是不用考虑输入数值的大小顺序,因为对于 b = a % b(如果a<b,就会将a赋值给b,后续操作将b赋值给a)就完成了大小数值的转换。
int main()
{
int num = 0;
int last_num;
int position = 1;//从个位开始
int new_num = 0;
int result = 0;
scanf("%d", &num);
while (num)
{
//拿出最后一位数字
last_num = num % 10;
num /= 10;//消位
//判断要求
new_num = (last_num % 2 == 0) ? 0 : 1;
//构建新数字
result = new_num * position + result;
position *= 10;//初始为1,每次*10进位
}
printf("%d\n", result);
return 0;
}
int main()
{
int a = 0;
int b = 0;
int c = 0;
int d = 0;
scanf("%d%d%d%d", &a, &b, &c, &d);
float sum_score = a * 0.2 + b * 0.1 + c * 0.2 + d * 0.5;
printf("%.1f\n", sum_score);
return 0;
}
int main()
{
int a = 0;
int b = 0;
int c = 0;
int d = 0;
scanf("%d%d%d%d", &a, &b, &c, &d);
int result = (a + b - c) * d;
printf("%d\n", result);
return 0;
}