Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;删除数字的第一位和最后一位_C++_Loops_Counting_Modulus - Fatal编程技术网

C++ C++;删除数字的第一位和最后一位

C++ C++;删除数字的第一位和最后一位,c++,loops,counting,modulus,C++,Loops,Counting,Modulus,我正试图写一个程序来去掉数字的第一个和最后一个数字。对于最后一个数字,将整数除以10可以解决这个问题。我需要找到一种使用%删除第一个数字的方法,但似乎我的逻辑在某个地方出了问题,我的程序运行了,但无法正常工作。看到逻辑错误了吗 #include <iostream> using namespace std; int main() { int x; int y; cout << "Enter a number to have the first a

我正试图写一个程序来去掉数字的第一个和最后一个数字。对于最后一个数字,将整数除以10可以解决这个问题。我需要找到一种使用%删除第一个数字的方法,但似乎我的逻辑在某个地方出了问题,我的程序运行了,但无法正常工作。看到逻辑错误了吗

#include <iostream>
using namespace std;

int main() {
    int x;
    int y;
    cout << "Enter a number to have the first and last didgets removed" << endl;
    cin >> x;

    x /= 10;
    y = x;
    int count = 0;

    while (y > 1)
    {
        y /= 10;
        count++;
    }

    int newNum = x %(10 ^ (count));

    cout << newNum << endl; 
    cin.ignore();
    cin.get();

    return 0;
}
#包括
使用名称空间std;
int main(){
int x;
int-y;
cout x;
x/=10;
y=x;
整数计数=0;
而(y>1)
{
y/=10;
计数++;
}
int newNum=x%(10^(计数));

cout有几个问题,但关键问题可能是:

int newNum = x %(10 ^ (count));
^
是按位的
xor
,它不是幂运算符

相反,您可以尝试以下方法:

int newNum;
if (y < 10)
    newNum = 0; // or what should it be?
else
{
    int denominator = 1;
    while (y >= 10)
    {
        y /= 10;
        denominator *= 10;
    }
    newNum = x % denominator;
}
intnewnum;
如果(y<10)
newNum=0;//或者应该是什么?
其他的
{
int分母=1;
而(y>=10)
{
y/=10;
分母*=10;
}
newNum=x%分母;
}

p.S.有更短更快的算法,但我试图保留给定算法的逻辑。

另一个类似的整数算术解决方案:

#include <iostream>
using namespace std;

int main() {
    int x;
    int y;
    cout << "Enter a number to have the first and last didgets removed" << endl;
    cin >> x;

    x /= 10;
    y = x;
    int count = 0;

    while (y > 9) {
        y /= 10;
        ++count;
    }
    for (int i = 0; i < count; i++) 
        y *= 10;
    x -= y;

    cout << x << endl; 
    cin.ignore();
    cin.get();

    return 0;
}
#包括
使用名称空间std;
int main(){
int x;
int-y;
cout x;
x/=10;
y=x;
整数计数=0;
而(y>9){
y/=10;
++计数;
}
for(int i=0;i>n;
d=n;
b=n/10%10;
而(n>99){
n=n/10;
c=n/10;
c=n%10;
g=(n/10)/(n/10);
h=h+g;
}
a=b;
f=d-(a*10)+(c*10);
而(d>99)
d=d/10;
开关(h)
{
案例2:bb=100;断裂;
案例3:bb=1000;断裂;
案例4:bb=10000;断裂;
案例5:bb=100000;断裂;
案例6:bb=1000000;断裂;
案例7:bb=10000000;断裂;
案例8:bb=100000000;断裂;
案例9:bb=100000000;断裂;
}
e=f-(f/bb)*bb;
总和=((d/10)*10+(a))*bb+e;

我找到了如何去掉第一个数字的答案

#包括
#包括
先删除空_(int&num){
num%=静态施法(pow(10,静态施法(log10(num)));
}
基本上它是这样做的
x%(10^floor(log10(x))


要删除最后一个数字,只需将numer除以10,然后按照您最初的计划取整个部分(
floor(x/10)
)。

非常感谢,我现在得到了它。我唯一需要更改的代码是int newNum=pow(10,count);x%=newNum;cout@XerradAnon我不会选择
pow
。如果由于四舍五入,你得到的是
9999.99…
而不是
10000
。即使在实践中没有这种情况发生,这种方法也是可疑和危险的。@XerradAnon也
while(y>1)
看起来不正确。请尝试使用以
1开头的数字和其他数字进行测试。我明白你的意思,我现在可以使用所有数字进行测试,然后任何一个数字(如55555)都会因为舍入而显示5555,并从1开始出现问题。我删除了pow并设置为while(y>9.9)。现在一切似乎都正常。感谢您的所有输入。@Xeradanon
y>9.9
是正确的,但看起来很奇怪:)。
y
是整数。因此我建议您选择
y>9
y>=
10`。感谢您使用我的代码并修复了需要执行的操作,这使得理解逻辑变得更加容易,因为大多数o如果这是我所做的,我可以很容易地遵循你用它解决的问题。
#include <iostream>
using namespace std;

int main() {

    int n,a,b,c,d,e,f,g,h=0, bb, sum;
    cin>>n;
    d=n;
    b=n/10%10;
    while(n>99) {
        n=n/10;
        c=n/10;
        c=n%10;
        g=(n/10)/(n/10);
        h=h+g;
    }
    a=b;
    f=d-(a*10)+(c*10);
    while(d>99)
        d=d/10;
    switch(h)
    {
        case 2: bb=100; break;
        case 3: bb=1000; break;
        case 4: bb=10000; break;
        case 5: bb=100000; break;
        case 6: bb=1000000; break;
        case 7: bb=10000000; break;
        case 8: bb=100000000; break;
        case 9: bb=1000000000; break;
    }
    e=f-(f/bb)*bb;
    sum=((d/10)*10+(a))*bb+e;
    cout << sum << endl;
}