c - 矩阵第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]);
}
运行这个之后,我得到一个非常大的数字!我应该修改什么?
解决方案
代码中有许多可以改进的地方。
- 首先,您必须在最里面的循环内将 reversedNumber 设置为零,这就是您获得大数字的原因。
- 您将参数传递给函数,但定义不正确。
此外,您已经声明您只需要反转第 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"); } }
推荐阅读
- c++ - eigen::solve 的返回值的赋值耗费大量时间
- java - 更改 IMAGE_CAPTURE Intent 的图片大小/分辨率
- angular - 如何在 Angular 中已经有图像的地方更改图像?
- html - Chrome CSS问题,跨度文本底部的不可移动空格
- html - 为什么 Ipad 4 和 Ipad mini 的网页显示有差异?
- php - 如何在 laravel 中使用密码确认更新现有用户表值
- android - 调用 ViewModel 实例是否会重置 LiveData?
- spring - 数据插入时我在 spring Dao 中遇到错误:警告:servlet spring 抛出异常 java.lang.NullPointerException
- java - 关于客户注释处理器,为什么 getElementsAnnotatedWith() 返回的集合大小为 0
- junit - 我正在尝试使用 easymock 返回列表