题解 | #将真分数分解为埃及分数#
将真分数分解为埃及分数
https://www.nowcoder.com/practice/e0480b2c6aa24bfba0935ffcca3ccb7b
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void intochar(unsigned long a, char str[]) {
unsigned long count = 1;
unsigned long k = 1;
unsigned long temp = a;
while (temp / 10 != 0) {
count *= 10;
k++;
temp = temp / 10;
}
for (int i = 0; i < k; i++) {
str[i] = a / count+'0';
a = a % count;
count = count / 10;
}
}
int main() {
char str[2][10];
unsigned long cou[2];
char res[100][10] = {0};
while (~scanf("%ld/%ld", &cou[0],&cou[1])) {
int k = 0;
char ress1[20];
unsigned long mu = 0;
memset(ress1, 0, sizeof(ress1));
while (cou[1] % cou[0] != 0) {
char zi[10] = "1/";
mu = cou[1] / cou[0] + 1;
intochar(mu, ress1);
strcpy(res[k], strcat(zi, ress1));
k++;
int temp_cou1 = cou[1];
cou[1] = mu * cou[1];
cou[0] = cou[0] * mu - temp_cou1;
memset(ress1, 0, sizeof(ress1));
}
char ress2[20];
memset(ress2, 0, sizeof(ress2));
intochar(cou[0], ress1);
intochar(cou[1], ress2);
strcat(strcat(ress1, "/"), ress2);
if (cou[1] % cou[0] == 0) {
strcpy(res[k], ress1);
}
printf("%s",res[0]);
for (int i = 1; i <= k; i++) {
printf("+%s", res[i]);
}
printf("\n");
}
}
查看1道真题和解析