1个回答
2020-11-29
展开全部
题目有问题。题中说“插入到新数y的第r(r=k%7)位”,r的取值范围为0~6,在用例1中,y=7654321,r=3,z=762854321,可以看到这里认为y中的7为第1位,那么输入其他的数如9700000,算出r=0,怎么处理?
以下程序,当r=0时,把m插入到y的前面。
pow 为浮点数运算,不精确,要用 (int) (pow(a, b) + 0.5)
#define N 7
if (m > 9) {
k = m / 10 + m % 10;
r = k % 7;
if (r == 0) {
r = 1;
}
z = (y / (int) (pow(10, N - r + 1) + 0.5))
* (int) (pow(10, N - r + 3) + 0.5)
+ m * (int) (pow(10, N - r + 1) + 0.5)
+ y % (int) (pow(10, N - r + 1) + 0.5);
} else {
z = m * (int) (pow(10, N) + 0.5) + y;
}
printf("z=%d\n", z);
#include <stdio.h>
#include <stdlib.h>
#define N 7
void input();
void to_digits();
void sum();
void sort();
void swap(int, int);
void calc_z();
int a;
int digits[N];
int m = 0;
int main() {
input();
to_digits();
sum();
sort();
calc_z();
return 0;
}
void input() {
setbuf(stdout, NULL);
printf("请输入一个 7 位数:");
scanf("%d", &a);
if (a < 1000000 || a > 9999999) {
printf("输入错误\n");
exit(1);
}
}
void to_digits() {
int b = a;
int i = N - 1;
while (i >= 0) {
digits[i--] = b % 10;
b /= 10;
}
}
void sum() {
int i = 0;
m = 0;
for (i = 0; i < N; i++) {
m += digits[i];
}
printf("各位数字之和m:%d\n", m);
}
void sort() {
int i = 0;
int j = 0;
int t = 0;
for (i = 0; i < N - 1; i++) {
t = i;
for (j = i + 1; j < N; j++) {
if (digits[j] > digits[t]) {
t = j;
}
}
if (t != i) {
swap(i, t);
}
}
printf("新数y:");
for (i = 0; i < N; i++) {
printf("%d", digits[i]);
}
printf("\n");
}
void calc_z() {
int i = 0;
int r = m >= 10 ? (m / 10 + m % 10) % 7 : 0;
if (r == 0) {
r = 1;
}
printf("新数z:");
for (i = 0; i < r - 1; i++) {
printf("%d", digits[i]);
}
printf("%d", m);
for (i = r - 1; i < N; i++) {
printf("%d", digits[i]);
}
printf("\n");
}
void swap(int i, int j) {
int t = digits[i];
digits[i] = digits[j];
digits[j] = t;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询