C 实现一个反转函数来反转整数,但是这里的输出总是0
我不明白为什么返回。。。。不起作用。不知何故,输出总是0。这里对C 实现一个反转函数来反转整数,但是这里的输出总是0,c,integer,C,Integer,我不明白为什么返回。。。。不起作用。不知何故,输出总是0。这里对atoi的返回调用总是输出0 #include <stdio.h> //INCLUDES #include <stdlib.h> int reverse (int x); //Func Decls int main () { printf ("%d", reverse (123)); //123=321, -123=-321, 120=21, 0=0 return 0; }
atoi
的返回调用总是输出0
#include <stdio.h> //INCLUDES
#include <stdlib.h>
int reverse (int x); //Func Decls
int
main ()
{
printf ("%d", reverse (123)); //123=321, -123=-321, 120=21, 0=0
return 0;
}
int
reverse (int x)
{
int i, rem = 0;
char arr[15];
while (x % 10 != 0)
{
rem = x % 10;
arr[i] = ((char)rem);
x /= 10;
i++;
}
return atoi(arr); //OUTPUT = 0, does not return actual output
}
#include//INCLUDES
#包括
反向整数(整数x)//职能部门
int
主要()
{
printf(“%d”,反面(123));//123=321,-123=-321,120=21,0=0
返回0;
}
int
反向(整数x)
{
int i,rem=0;
char-arr[15];
而(x%10!=0)
{
rem=x%10;
arr[i]=((字符)rem);
x/=10;
i++;
}
return atoi(arr);//OUTPUT=0,不返回实际输出
}
问题在于atoi()
函数的使用。atoi()
函数基本上将带有ASCII编码的数字字符的字符串转换为整数。
如果查看表格,数字1、2和3分别编码字符“^A”
、“^B”
和“^C”
。这意味着,在while
循环reverse()
函数之后,作为参数传递给atoi()
的字符串不是数字字符串,因此零作为错误返回。此外,字符'1'
、'2'
和'3'
分别编码为数字49、50和51
现在,我建议您更改整个实现,因为接收整数作为操作的输入是没有意义的,在操作过程中,使用atoi()
将其转换为字符串以再次返回整数。所以,忘记字符串,然后atoi()
。
让我们开始创建一个循环,使用模块操作符对数字的每个数字进行操作,就像您所做的那样
int reverse (int x) {
int result = 0;
while ( x != 0 ) {
result = x%10;
}
return result;
}
然后,要在结果中插入另一个数字,请执行相反的操作:将其乘以10
int reverse (int x) {
int result = 0;
while ( x != 0 ) {
result = result*10 + x%10;
}
return result;
}
现在,从x
中剪下目标数字,将其除以10
int reverse (int x) {
int result = 0;
while ( x != 0 ) {
result = result*10 + x%10;
x /= 10;
}
return result;
}
最后,完整的代码
#include <stdio.h>
#include <stdlib.h>
int reverse (int x);
int main () {
printf ("%d\n", reverse(123));
printf ("%d\n", reverse(-123));
printf ("%d\n", reverse(120));
printf ("%d\n", reverse(0));
return 0;
}
int reverse (int x) {
int result = 0;
while ( x != 0 ) {
result = result*10 + x%10;
x /= 10;
}
return result;
}
问题在于atoi()
函数的使用。atoi()
函数基本上将带有ASCII编码的数字字符的字符串转换为整数。
如果查看表格,数字1、2和3分别编码字符“^A”
、“^B”
和“^C”
。这意味着,在while
循环reverse()
函数之后,作为参数传递给atoi()
的字符串不是数字字符串,因此零作为错误返回。此外,字符'1'
、'2'
和'3'
分别编码为数字49、50和51
现在,我建议您更改整个实现,因为接收整数作为操作的输入是没有意义的,在操作过程中,使用atoi()
将其转换为字符串以再次返回整数。所以,忘记字符串,然后atoi()
。
让我们开始创建一个循环,使用模块操作符对数字的每个数字进行操作,就像您所做的那样
int reverse (int x) {
int result = 0;
while ( x != 0 ) {
result = x%10;
}
return result;
}
然后,要在结果中插入另一个数字,请执行相反的操作:将其乘以10
int reverse (int x) {
int result = 0;
while ( x != 0 ) {
result = result*10 + x%10;
}
return result;
}
现在,从x
中剪下目标数字,将其除以10
int reverse (int x) {
int result = 0;
while ( x != 0 ) {
result = result*10 + x%10;
x /= 10;
}
return result;
}
最后,完整的代码
#include <stdio.h>
#include <stdlib.h>
int reverse (int x);
int main () {
printf ("%d\n", reverse(123));
printf ("%d\n", reverse(-123));
printf ("%d\n", reverse(120));
printf ("%d\n", reverse(0));
return 0;
}
int reverse (int x) {
int result = 0;
while ( x != 0 ) {
result = result*10 + x%10;
x /= 10;
}
return result;
}
此任务不需要数组或atoi
函数,且while
循环的逻辑不正确。一个正确且简单的方法可以是这样的(前提是不发生整数溢出):
#包括
反向整数(整数x)
{
int r=0;
而(x!=0){
r=10*r+x%10;
x/=10;
}
返回r;
}
内部主(空)
{
printf(“%d\n”,反面为(1234));
返回0;
}
此任务不需要数组或atoi
函数,而while
循环的逻辑不正确。一个正确且简单的方法可以是这样的(前提是不发生整数溢出):
#包括
反向整数(整数x)
{
int r=0;
而(x!=0){
r=10*r+x%10;
x/=10;
}
返回r;
}
内部主(空)
{
printf(“%d\n”,反面为(1234));
返回0;
}
根据您的代码,您可以稍微修改代码以使其正常工作。以下是我的看法:
#include <stdio.h> //INCLUDES
#include <stdlib.h>
int reverse (int x); //Func Decls
int main () {
printf ("%d", reverse (123)); //123=321, -123=-321, 120=21, 0=0
return 0;
}
int reverse (int x) {
int i, rem = 0;
int arr[15];
while (x != 0)
{
rem = x % 10;
arr[i] = rem;
x /= 10;
i++;
}
int result = 0;
for (int j = 0; j < i; j++) {
result = 10 * result + arr[j];
}
return result;
}
#include//INCLUDES
#包括
反向整数(整数x)//职能部门
int main(){
printf(“%d”,反面(123));//123=321,-123=-321,120=21,0=0
返回0;
}
反向整数(整数x){
int i,rem=0;
int-arr[15];
而(x!=0)
{
rem=x%10;
arr[i]=rem;
x/=10;
i++;
}
int结果=0;
对于(int j=0;j
根据您的代码,您可以稍微修改代码以使其正常工作。以下是我的看法:
#include <stdio.h> //INCLUDES
#include <stdlib.h>
int reverse (int x); //Func Decls
int main () {
printf ("%d", reverse (123)); //123=321, -123=-321, 120=21, 0=0
return 0;
}
int reverse (int x) {
int i, rem = 0;
int arr[15];
while (x != 0)
{
rem = x % 10;
arr[i] = rem;
x /= 10;
i++;
}
int result = 0;
for (int j = 0; j < i; j++) {
result = 10 * result + arr[j];
}
return result;
}
#include//INCLUDES
#包括
反向整数(整数x)//职能部门
int main(){
printf(“%d”,反面(123));//123=321,-123=-321,120=21,0=0
返回0;
}
反向整数(整数x){
int i,rem=0;
int-arr[15];
而(x!=0)
{
rem=x%10;
arr[i]=rem;
x/=10;
i++;
}
int结果=0;
对于(int j=0;j
关于:
int i, rem = 0;
及
中的局部变量i
未初始化!。在我的系统上,结果是seg故障事件。关于:
int i, rem = 0;
及
中的局部变量i
未初始化!。在我的系统上,结果是seg故障事件。数字的字符表示与其数值不同。通常,您可以执行“0”+rem
来获取数字的字符表示形式。char arr[15]=”
以0
填充。然后而(x){…}
和arr[i]=rem+'0'代码>数字的字符表示形式与其数值不同。通常,您可以执行“0”+rem
来获取数字的字符表示形式。char arr[15]=”
以0
填充。然后而(x){…}
和