3:數字反轉
總時間限制: 1000ms 記憶體限制: 65536kB
描述
給定一個整數,請将該數各個位上數字反轉得到一個新數。新數也應滿足整數的常見形式,即除非給定的原數為零,否則反轉後得到的新數的最高位數字不應為零(參見樣例2)。
輸入
輸入共 1 行,一個整數N。
-1,000,000,000 ≤ N≤ 1,000,000,000。
輸出
輸出共 1 行,一個整數,表示反轉後的新數。
樣例輸入
樣例 #1:
123
樣例 #2:
-380
樣例輸出
樣例 #1:
321
樣例 #2:
-83
#include<iostream>
#include<stdio.h>
#include<string>
#include<algorithm>
using namespace std;
//http://cxsjsxmooc.openjudge.cn/2017t1summerw4/3/
//程式寫的真垃圾,strrev不能在oj上面用,隻能改成reverse
//注意輸入是1000這種情況,要把0全部去掉
string a;
int len,flag,len2;
int main(){
while(cin>>a){
flag=;
len=a.size();
if(!isdigit(a[])){
flag=;
len--;
}
if(len==)cout<<a<<endl;
else {
reverse(a.begin(),a.end());
if(a[]=='0'){
if(!flag)
cout<<"-";
int k=;
while(a[k]=='0')k++;
for(int i=k;i<len;i++){
cout<<a[i];
}
cout<<endl;
}
else{
if(!flag)
cout<<"-";
for(int i=;i<len;i++){
cout<<a[i];
}
cout<<endl;
}
}
}
}
9.14号又寫了一遍
#include<iostream>
#include<string.h>
using namespace std;
//http://noi.openjudge.cn/ch0105/29/
char a[];
int k,len;
int main(){
cin>>a;
len=strlen(a);
if(a[]=='0'){
cout<<"0"<<endl;
return ;
}
if(a[]=='-'){
cout<<"-";
}
k=len-;
while(a[k]=='0'){
k--;
}
for(int i=k;i>=;i--){
if(a[i]!='-'){
cout<<a[i];
}
}
cout<<endl;
}
一心想着要用char數組,結果這麼複雜,看看人家直接用整數在做的方法,簡單的不行。
思路:判斷是否是負數,如果是負數,輸出一個“-”号,再變為正數進行計算
計算過程:用一個數s來計算需要反轉的數的從後往前的每一位,每次除以10求餘,就得了。
#include<stdio.h>
int main()
{
int x,s=;
scanf("%d",&x);
if(x<)//判斷是否負數
{
printf("-");//是,輸出一個負号
x=x*(-);//變為正數
}
while(x>)//循環到這個數小于等于0為止
{
s=s*+x%;//計算每一位
x=x/;//每次要除以10
}
printf("%d",s);//輸出即可
return ;
}