int qushufanzhuan(int x){ int i=0,j=0,p=0; while(x!=0){ x/=10; j++; } int *a=(int*)malloc(j*sizeof(int)); while(x!=0){ a[i]=x%10; i++; x/=10; } for(int l=j-1;l>=0;l--){ int f=0; p+=a[l]*pow(10,j); f++;; } free(a); return p; } int reverse(int x){ int p; if(x==0){ return p=0; }else if(x>0){ p=qushufanzhuan(x); return p; }else{ p=qushufanzhuan(x); return -p; } }
时间: 2023-11-27 15:03:26 浏览: 51
这段代码实现了一个将整数翻转的函数。其中,qushufanzhuan函数实现了去掉整数前导0后将整数翻转的操作,而reverse函数则根据输入的整数正负性,调用qushufanzhuan函数并返回翻转后的整数。需要注意的是,该代码中存在一些问题,例如在qushufanzhuan函数中的第二个while循环中,x的值已经在第一个while循环中被除成了0,所以第二个while循环中的代码不会被执行。此外,pow函数的使用也可能导致精度问题。
相关问题
#include<stdio.h> #include<iostream> #define M 100 using namespace std; void px(int *p,int c) { int a[M];p = a; for (int i = 0; i < 5;i++) { for (int j; j < 4 - i;j++) { if(p[j]>p[j+1]) {c = p[j], p[j] = p[j + 1], p[j+1] = c;} } } } int main() { int a[M]; int *p, c; p = a; for (int i = 0;i < 5;i++) cin >> a[i]; px(p, c); for (int i = 0;i < 5;i++) cout<< a[i]<<" "; return 0; }
这段代码实现了一个冒泡排序算法,但是存在一些问题:
1. 在 `px` 函数中,数组 `a` 是在函数内部声明的,而指针 `p` 却指向了一个未定义的、位于函数栈上的数组 `a`。这样做是不安全的,因为函数执行完毕后,数组 `a` 的内存空间会被释放,指针 `p` 就会变成野指针。
2. 在 `px` 函数中,交换两个元素的代码不够简洁,可以使用 C++ 中的 `std::swap` 函数来代替。
3. 在 `px` 函数中,内层循环的初始值 `j` 没有被初始化,这会导致程序的行为是未定义的。
下面是修改后的代码:
```c++
#include <iostream>
#include <algorithm>
#define M 100
using namespace std;
void px(int *p, int n) {
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (p[j] > p[j+1]) {
swap(p[j], p[j+1]);
}
}
}
}
int main() {
int a[M];
int n = 5;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
px(a, n);
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
return 0;
}
```
在这个示例中,我们使用一个名为 `n` 的变量来保存数组的元素个数,并将其传递给 `px` 函数。在 `px` 函数中,我们直接使用指针 `p` 来访问数组中的元素,并使用 `std::swap` 函数来交换元素的值。这个函数的实现更加简洁和安全。
输出结果为:
```
1 2 3 4 5
```
int zhuanhua(char c){ int i; switch(1){ case 1:if(c='I') return i=1; break; case 2:if(c='V') return i=5; break; case 3:if(c='X') return i=10; break; case 4:if(c='L') return i=50; break; case 5:if(c='C') return i=100; break; case 6:if(c='D') return i=500; break; case 7:if(c='M') return i=1000; break; } } int romanToInt(char * s){ int i=sizeof(s)/sizeof(s[0]); int *sum=(int*)malloc(i*sizeof(int)); for(int j=0;j<i;j++){ sun[j]=zhuanhua(s[j]); } int k=0; for(int l=0;l<i;l++){ if(l==i-1){ k=k+sum[l] } if(sum[l]<sum[l+1]){ k=k-sum[l];} else k=k+sum[l]; } return k; }
这是一段C语言代码,实现的功能是将罗马数字转换为整数。其中`zhuanhua`函数是将罗马数字字符转换为对应的整数值,`romanToInt`函数是将字符串形式的罗马数字转换为整数。代码中有一些错误,比如`switch`语句中的`case`标签应该是数字,而不是`1`、`2`等,以及`sum`数组应该是`sum`而不是`sun`。正确的代码应该是这样的:
```
int zhuanhua(char c){
int i;
switch(c){
case 'I': return i=1;
case 'V': return i=5;
case 'X': return i=10;
case 'L': return i=50;
case 'C': return i=100;
case 'D': return i=500;
case 'M': return i=1000;
}
}
int romanToInt(char * s){
int i=strlen(s);
int *sum=(int*)malloc(i*sizeof(int));
for(int j=0;j<i;j++){
sum[j]=zhuanhua(s[j]);
}
int k=0;
for(int l=0;l<i;l++){
if(l==i-1){
k=k+sum[l];
}
else if(sum[l]<sum[l+1]){
k=k-sum[l];
}
else{
k=k+sum[l];
}
}
return k;
}
```
这段代码的实现思路是先将罗马数字转换为整数,然后根据规则计算出最终的结果。
阅读全文