#include<iostream>
#include<cmath>
using namespace std;
int main(){
int n,l=0,a,s,d,w;
cin>>n;
a=n;
while(a!=0){
l++;
a=a/10;
}
if(l%2==0){
s=n/pow(10,(l/2)+1);
w=pow(10,(l/2)-1);
d=n%w;
} else{
s=n/pow(10,l/2+1);
w=pow(10,l/2);
d=n%w;
}
cout<<s*(pow(10,(l/2)-1));
}
当我输入&#34; 12345&#34;它应该显示&#34; 1245&#34;,而是显示&#34; 120&#34;。为什么呢? 代码应该消除不均匀数字的中间数字,或偶数数字的两个中间数字,但数字的右侧(变量d)不能显示正确的数字。
答案 0 :(得分:0)
d
不是输出的一部分。因此,它的计算将不会显示。
if(l%2==0){
s=n/pow(10,(l/2)+1);
w=pow(10,(l/2)-1);
d=n%w;
} else{
s=n/pow(10,l/2+1);
w=pow(10,l/2);
d=n%w;
// if n == 12345, I get
// s = 12
// w = 100
// d = 45
// l = 5
}
cout<<s*(pow(10,(l/2)-1));
// outputs 120 (s * 10^ 1) == s * 10
我可以看到d
没有使用,但还有什么意外
答案 1 :(得分:0)
您没有将d
部分添加到上次计算中:
l
应该针对偶数和奇数进行修改。
尝试:
if(l%2==0){
s=n/pow(10,(l/2)+1);
w=pow(10,(l/2)-1);
d=n%w;
l = l/2 - 1;
} else{
s=n/pow(10,(l/2) + 1);
w=pow(10,l/2);
d=n%w;
l = l/2;
}
cout<<s * pow(10, l) + d<<std::endl;
答案 2 :(得分:0)
这是工作代码
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n,l=0,a,s,d,w, result;
cin>>n;
a=n;
while(a!=0)
{
l++;
a=a/10;
}
if(l%2==0)
{
s=n/ceil(pow(10,(l/2)+1));
w=ceil(pow(10,(l/2)-1));
d=n%w;
result = s*(ceil(pow(10,(l/2-1))))+d;
}
else
{
s=n/ceil(pow(10,l/2+1));
w=ceil(pow(10,l/2));
d=n%w;
result = s*(ceil(pow(10,(l/2))))+d;
}
cout<<result<<endl;
}
ceil过去常常使用pow
处理double precision problem。