C++ C++;删除数字的第一位和最后一位
我正试图写一个程序来去掉数字的第一个和最后一个数字。对于最后一个数字,将整数除以10可以解决这个问题。我需要找到一种使用%删除第一个数字的方法,但似乎我的逻辑在某个地方出了问题,我的程序运行了,但无法正常工作。看到逻辑错误了吗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
#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)。现在一切似乎都正常。感谢您的所有输入。@Xeradanony>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;
}