C语言代码出错?

请问第34行到第48行之间的代码有什么问题呀?求出来的z是错的……谢谢大家!... 请问第34行到第48行之间的代码有什么问题呀?求出来的z是错的……谢谢大家! 展开
 我来答
匿名用户
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;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式