题目:
难点:
回文数的判断。
方法一:
#include <stdio.h>
#include <string.h>
char num1[7];
int num2 = 0;
int n1_1, n2_2;
int panduan(int num, int n1, int n2) {
if (num2 < num) {
num2 = num;
n1_1 = n1;
n2_2 = n2;
}
return num2;
}
int main() {
int num;
for (int n1 = 100; n1 <= 999; n1++) {
for (int n2 = 100; n2 <= 999; n2++) {
num = n1 * n2;
sprintf(num1, "%d", num);
if (strlen(num1) == 5) {
if (num1[0] == num1[4] && num1[1] == num1[3]) {
num2 = panduan(num, n1, n2);
}
} else if (num1[0] == num1[5] && num1[1] == num1[4] && num1[2] == num1[3]) {
num2 = panduan(num, n1, n2);
}
}
}
printf("%d * %d = %d", n1_1, n2_2, num2);
return 0;
}
把乘积强制转换成字符型,再进行回文数的判断。
方法二:
#include <stdio.h>
int is_revese(int n) {
int temp = 0, x = n;
while (x) {
temp = temp * 10 + x % 10;
x /= 10;
}
return temp == n;
}
int main() {
int ans = 0;
for (int n1 = 100; n1 < 1000; n1++) {
for (int n2 = 100; n2 < 1000; n2++) {
if (is_revese(n1 * n2) && ans < n1 * n2) {
ans = n1 * n2;
printf("%d * %d = %d\n", n1, n2, ans);
}
}
}
printf("ans = %d\n", ans);
return 0;
}
整数的翻转。
代码优化:
优化1:
减少缩进,提高代码可读性。
#include <stdio.h>
int is_revese(int n) {
int temp = 0, x = n;
while (x) {
temp = temp * 10 + x % 10;
x /= 10;
}
return temp == n;
}
int main() {
int ans = 0;
for (int n1 = 100; n1 < 1000; n1++) {
for (int n2 = 100; n2 < 1000; n2++) {
if (!is_revese(n1 * n2) || ans >= n1 * n2) continue;
//减少缩进,提高代码可读性。
ans = n1 * n2;
printf("%d * %d = %d\n", n1, n2, ans);
}
}
printf("ans = %d\n", ans);
return 0;
}
优化2:
使n2初始化成n1,提高效率。
#include <stdio.h>
int is_revese(int n) {
int temp = 0, x = n;
while (x) {
temp = temp * 10 + x % 10;
x /= 10;
}
return temp == n;
}
int main() {
int ans = 0;
for (int n1 = 100; n1 < 1000; n1++) {
for (int n2 = n1; n2 < 1000; n2++) { //避免重复,提高效率
if (!is_revese(n1 * n2) || ans >= n1 * n2) continue;
//减少缩进,提高代码可读性。
ans = n1 * n2;
printf("%d * %d = %d\n", n1, n2, ans);
}
}
printf("ans = %d\n", ans);
return 0;
}
优化3:
更改判断顺序,减少计算次数。
#include <stdio.h>
int is_revese(int n) {
int temp = 0, x = n;
while (x) {
temp = temp * 10 + x % 10;
x /= 10;
}
return temp == n;
}
int main() {
int ans = 0;
for (int n1 = 100; n1 < 1000; n1++) {
for (int n2 = n1; n2 < 1000; n2++) { //避免重复,提高效率
if (ans >= n1 * n2 || !is_revese(n1 * n2)) continue;
//减少缩进,提高代码可读性。//更改判断顺序,减少计算次数。
ans = n1 * n2;
printf("%d * %d = %d\n", n1, n2, ans);
}
}
printf("ans = %d\n", ans);
return 0;
}
优化4:
从大到小排序,减少计算次数。
#include <stdio.h>
int is_revese(int n) {
int temp = 0, x = n;
while (x) {
temp = temp * 10 + x % 10;
x /= 10;
}
return temp == n;
}
int main() {
int ans = 0;
for (int n1 =999; n1 >= 100; n1--) {
for (int n2 = n1; n2 >= 100; n2--) { //避免重复,提高效率
if (ans >= n1 * n2 || !is_revese(n1 * n2)) continue;
//减少缩进,提高代码可读性。//更改判断顺序,减少计算次数。
ans = n1 * n2;
printf("%d * %d = %d\n", n1, n2, ans);
}
}
printf("ans = %d\n", ans);
return 0;
}