洛谷—P1307 数字反转
生活随笔
收集整理的這篇文章主要介紹了
洛谷—P1307 数字反转
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
給定一個整數,請將該數各個位上數字反轉得到一個新數。新數也應滿足整數的常見形式,即除非給定的原數為零,否則反轉后得到的新數的最高位數字不應為零(參見樣例2)。
輸入輸出格式
輸入格式:
?
一個整數?NN
?
輸出格式:
?
一個整數,表示反轉后的新數。
?
輸入輸出樣例
輸入樣例#1:?復制
123輸出樣例#1:?復制
321輸入樣例#2:?復制
-380輸出樣例#2:?復制
-83說明
數據范圍
-1,000,000,000≤N≤1,000,000,000?1,000,000,000≤N≤1,000,000,000。
noip2011普及組第一題
?
得分:70?
3個點WA了 ?目前還沒排查出來...?感覺自己思路好復雜
#include <iostream> #include <algorithm> #include <string>using namespace std;typedef long long ll;int main() {string s;bool flagFu = false, flag0 = false; // 負數標志cin >> s;if(s[0] == '-') //如果是負數{flagFu = true;}if(s[s.size()-1] == '0'){flag0 = true;}if(flagFu&&!flag0){for(int i = 1; i <= s.size()/2; i++){char t = s[i];s[i] = s[s.size()-i];s[s.size()-i] = t;}printf("%s", s.c_str());}else if(flagFu&&flag0){int pos, pp=0;for(int i = s.size()-1; i > 0; i--){if(s[i] == '0') continue;else{pos = pp = i;break;}}for(int i = 1; i <= pos/2+1; i++){char t = s[i];s[i] = s[pos--];s[pos+1] = t;}for(int i = 0; i <= pp; i++){printf("%c", s[i]);}}else if(flag0&&!flagFu){int pos, pp=0;for(int i = s.size()-1; i >= 0; i--){if(s[i] == '0') continue;else{pos = pp = i;break;}}for(int i = 0; i <= pos/2+1; i++){char t = s[i];s[i] = s[pos--];s[pos+1] = t;}for(int i = 0; i <= pp; i++){printf("%c", s[i]);}}else if(!flagFu&&!flag0){for(int i = 0; i <= s.size()/2; i++){char t = s[i];s[i] = s[s.size() - 1 - i];s[s.size() - 1 - i] = t;}printf("%s", s.c_str());}return 0; }?
別人AC代碼:
作者:洛谷---God·Hero
#include <iostream> using namespace std; long long n,k;//反轉前的數和反轉后的數 int main() {cin >> n;while(n) //處理完了嗎{k = k * 10 + n % 10;//k已有的值*10騰出一個零歡迎新來的小弟n /= 10;//凄涼啊,又有人背叛了我,扔掉已經加上的那一位}cout << k << endl; }短小精悍....通俗易懂!
?
感悟:思維這個東西真的挺重要,解決問題的算法不止一種,但計算機系的學生就是要找最好最快的一種。
我好笨啊...
總結
以上是生活随笔為你收集整理的洛谷—P1307 数字反转的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洛谷--P1067 多项式输出
- 下一篇: 洛谷——P1056 排座椅