如何在c ++中交换数字中的第一个和最后一个数字

时间:2015-11-28 19:55:08

标签: c++

我不明白为什么以下代码总是以0回答。

#include <iostream>
using namespace std;

int main() {

    int n,a,b;
    cin>>n;
    b=n%10;

    while(n!=0) {
        a=n%10;
        n=n/10;     
    }
    a=b;
    b=a;
    cout<<n<<endl;
    return 0;
}

5 个答案:

答案 0 :(得分:2)

要交换两个数字,您需要一个临时寄存器

tmp=a;
a=b;
b=tmp;

但是,如果您尝试在n中交换数字,则需要更改n。你在循环中销毁了哪个。事先保留一份副本吗?

或者只是注意floor(log(n)/log(10))为第一个数字提供10的幂。

n=23456;
int firstdec = pow(10,floor(log(n)/log(10))); // eg 10000
int firstdig = n/firstdec; // eg 2
int lastdig  = n%10; // eg 6
int removed  = ((n-firstdig*firstdec)/10)*10 ; // eg 3450
int final    = removed + lastdig*firstdec + firstdig; // eg 63452

答案 1 :(得分:1)

a=b;
b=a;

看起来不错。 你的意思是swap(a, b)

int t = a;
a = b;
b = t;

而你实际上并没有改变n

答案 2 :(得分:0)

您的代码存在一些问题,例如变量swap。但是,您似乎也希望通过更改ab,相应地更改n,这是不会发生的。

首先,因为ab不是对数字的引用,所以它们仅仅是副本。其次,您在n查找loop中销毁了a,因此即使您修复了交换,代码仍然会打印0

我的建议是将整数转换为字符串,更改第一个和最后一个,然后将其转换回来。它会更简单,更易读。

为了做到这一点,你应该看看stringstream s。

答案 3 :(得分:0)

jupyter toree install

FileNotFoundError: [Errno 2] No such file or directory: '/usr/local/spark/python/lib'

答案 4 :(得分:-2)

以下是您的代码中缺少的内容。 real =输入值,第一个和最后一个数字= firstd和lastd,i =输入数字的位数。

real -= lastd;
    real += firstd;
    real -= (firstd*i);
    real += (lastd*i);