@[Max6700](/user/935012) 为什么要转数字呢,倒着输出就行了,转数字会爆的。
by chenluohan @ 2023-05-25 22:40:27
@[chenluohan](/user/673083) a?
by Max6700 @ 2023-05-25 22:41:37
@[Max6700](/user/935012) 只要反转后把前导0删除就可以了呀
by chenluohan @ 2023-05-25 22:41:45
@[chenluohan](/user/673083) 啥意思?(蒟蒻不解
by Max6700 @ 2023-05-25 22:44:02
@[Max6700](/user/935012) 而且请您把样例测一下,好吗?
by chenluohan @ 2023-05-25 22:44:12
@[Max6700](/user/935012)
给你发一个我反转普通数字的代码。
```cpp
reverse(s.begin(),s.end());
if(s == "0"){
cout << 0;
return 0;
}
while(s[0]=='0'){
s.erase(0,1);
}
cout << s;
```
by chenluohan @ 2023-05-25 22:46:20
@[chenluohan](/user/673083) 啊……
改成这样,就可以了啊……
```cpp
#include<bits/stdc++.h>
using namespace std;
string s;
string A,B;//前半段和后半段
int zt=1;//1==123,2==.,3==%,4==/
int xb;//下标
long long zh(string n)//普通的数字翻转
{
long long a=0;
for(int i=n.length()-1;i>=0;i--)
{
a=a*10LL+1LL*(n[i]-'0');
}
return a;
}
long long zh2(string n)//小数点后抹0的翻转
{
long long a=0;
for(int i=n.length()-1;i>=0;i--)
{
a=a*10LL+1LL*(n[i]-'0');
}
while(a%10==0 && a!=0)
a/=10;
return a;
}
int main(){
cin>>s;
for(int i=0;i<s.length();i++)
{
if(s[i]=='.')//为小数则调出循环,接下半段
{
zt=2;
xb=i;
break;
}
else if(s[i]=='%')//浅浅记一下
{
zt=3;
break;
}
else if(s[i]=='/')//分数同小数
{
zt=4;
xb=i;
break;
}
A+=s[i];//去前半段,若全为数字,则没有后半段
}
if(zt==2)//小数
{
for(int i=xb+1;i<s.length();i++)
B+=s[i];
cout<<zh(A)<<"."<<zh2(B);
}
else if(zt==3)//百分数
{
cout<<zh(A);
cout<<"%";
}
else if(zt==4)//分数
{
for(int i=xb+1;i<s.length();i++)
B+=s[i];
cout<<zh(A)<<"/"<<zh(B);
}
else//普通数字
{
cout<<zh(A);
}
return 0;//不怎么完美的结尾
}
```
刚改的
by Max6700 @ 2023-05-25 22:46:45
@[Max6700](/user/935012) emm.... 整数时最多有20位
~~话说这不是一道纯纯的模拟题吗,怎么做出了省选的感觉~~
by chenluohan @ 2023-05-25 22:49:10
@[chenluohan](/user/673083) ~~我哪知道……我怎么蒻……~~
by Max6700 @ 2023-05-25 22:49:55
@[Max6700](/user/935012) 不过似乎只用改一下整数部分反转的就行了
by chenluohan @ 2023-05-25 22:54:42