首页 > 解决方案 > 矩阵第5列所有数字的反转

问题描述

我有一个 C 问题,我需要反转 2x5 矩阵的第 5 列上的所有数字。

所以如果我有

1 2 3 4 89
3 8 6 8 91

这将成为

1 2 3 4 98
3 8 6 8 19

到目前为止我写的代码是:

#include <stdio.h>

void inverse() {
    int  reversedNumber = 0, remainder, mat[10][10], i, j;
    for (i = 0; i < 2; i++)
        for (j = 0; j < 5; j++) {

            while (mat[i][j] != 0) {
                remainder = mat[i][j] % 10;
                reversedNumber = reversedNumber * 10 + remainder;
                mat[i][j] /= 10;
            }
        }
    printf("Reversed Number = %d", reversedNumber);
}

void main()
{
    int mat[10][10], i, j;

    printf("Enter your matrix\n");
    for (i = 0; i < 2; i++)
        for (j = 0; j < 5; j++) {
            scanf("%d", &mat[i][j]);
        }

    printf("\nHere is your matrix:\n");
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 5; j++) {
            printf("%d ", mat[i][j]);
        }
        printf("\n");
    }

    inverse(mat[1][5]);
}

运行这个之后,我得到一个非常大的数字!我应该修改什么?

标签: c

解决方案


代码中有许多可以改进的地方。

  1. 首先,您必须在最里面的循环内将 reversedNumber 设置为零,这就是您获得大数字的原因。
  2. 您将参数传递给函数,但定义不正确。
  3. 此外,您已经声明您只需要反转第 5 列,最好调用一个反转单个数字的函数。

    #include<stdio.h>
    int inverse(int num) {   
      int  reversednum = 0;
      while(num){
       reversednum = reversednum*10 + num%10;
       num /= 10;
      }
      return reversednum;
    }
    
    void main(){  
     int mat[10][10],i,j;
    
     printf("Enter your matrix\n");  
     for(i=0;i<2;i++)
      for(j=0;j<5;j++){  
       scanf("%d",&mat[i][j]);  
      }  
    
     printf("\nHere is your matrix:\n");   
     for(i=0;i<2;i++){  
      for(j=0;j<5;j++){  
       printf("%d ",mat[i][j]);  
       if(j == 4) mat[i][j] = inverse(mat[i][j]);
      }  
      printf("\n");  
      }  
     }
    

推荐阅读