非标准版:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void) {
long A = 0, Da = 0;
int B = 0, Db = 0, flag_A = 0, flag_B = 0, result;
char A_[100], B_[100], A_flag[2], B_flag[2];
scanf("%d%d%d%d", &A, &Da, &B, &Db);
// 把数组存入字符数组 itoa atoi均是非标准C语言 可以使用 snprintf 代替
itoa(A, A_, 10);
itoa(B, B_, 10);
Da += '0'; Db += '0'; // 变字符型
for (int i = 0; i < strlen(A_); i++){
if (A_[i] == Da) flag_A++;
}
for (int i = 0; i < strlen(B_); i++) {
if (B_[i] == Db) flag_B++;
// ?: 为什么 B_[i]-='0',到后面strlen(B_)会变成4导致到 0 就停止了???? 未解决
}
// 减少数组定义,使用格式化原有数组
memset(A_, '\0', sizeof(A_));
memset(B_, '\0', sizeof(B_));
// 因为一开始Da+= '0' , 这里变回原样 _itoa 使 int -> char
itoa((Da -= '0'), A_flag, 10);
itoa((Db -= '0'), B_flag, 10);
// 字符拼接
for (int j = 0; j < flag_A; j++) {
strcat(A_, A_flag);
}
for (int j = 0; j < flag_B; j++) {
strcat(B_, B_flag);
}
// atoi 使 char -> int
result = (atoi)(A_)+(atoi)(B_);
printf("%d", result);
system("pause");
return EXIT_SUCCESS;
}
PAT 检查无法通过,vs 可以通过
标准版:
itoa 改成 sprintf
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void) {
long A = 0, Da = 0;
int B = 0, Db = 0, flag_A = 0, flag_B = 0, result;
char A_[100], B_[100], A_flag[2], B_flag[2];
scanf("%d%d%d%d", &A, &Da, &B, &Db);
sprintf(A_, "%d", A);
sprintf(B_, "%d", B);
Da += '0'; Db += '0';
for (int i = 0; i < strlen(A_); i++) {
if (A_[i] == Da) flag_A++;
}
for (int i = 0; i < strlen(B_); i++) {
if (B_[i] == Db) flag_B++;
}
memset(A_, '\0', sizeof(A_));
memset(B_, '\0', sizeof(B_));
sprintf(A_flag, "%d" , (Da-='0'));
sprintf(B_flag, "%d" , (Db -= '0'));
for (int j = 0; j < flag_A; j++) {
strcat(A_, A_flag);
}
for (int j = 0; j < flag_B; j++) {
strcat(B_, B_flag);
}
result = (atoi)(A_)+(atoi)(B_);
printf("%d", result);
return EXIT_SUCCESS;
}