現在算是爲了保研機試做準備吧,很久不練OJ了,本來就菜,現在更菜,就先挖個坑,記錄下自己PAT的題解。今天是第一題,記錄下下。
思路:首先對a+b的結果分情況,如果小於等於3位,直接輸出結果即可;如果是大於三位,那麼就要對結果進行分情況輸出了。我的思路是首先不管結果的正負,統統取絕對值進行操作,之後,將正整數轉化成字符串處理。整體思想是將原結果中的數據複製過來,該插入逗號的位置插入逗號,那麼這個關鍵的地方啊就在於如何找到正確的逗號位置,先找到第一個逗號的位置,之後每處理三個數字加一個逗號,直至處理結束,over。
坑:按以上的思路會出現例如,999,999的情況,所以針對這種情況要進行字符串的截取,還有就是記得給負數加上負號。還有一個很愚蠢的錯誤就是,在定義string str時,不能對str進行str[i]等很像char數組進行的操作,因爲str剛定義的時候,長度是0啊:)
代碼如下:
// PAT_onceagain.cpp: 定義控制檯應用程序的入口點。
//
//#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;
int main()
{
int a, b,ans;
string sans;
cin >> a >> b; //輸入整數
ans = abs(a + b);
sans = to_string(ans); //轉化成string類型
if (sans.length() <= 3)
{
cout << a+b<<endl;
}
else
{
int start = sans.length() % 3;
string str=""; //這樣的話,str的長度,是0啊
for (int i = 0; i < sans.length(); i++) //記得處理開頭就是逗號的情況和負數的情況
{
if (i == start || (i-start) % 3 ==0) //加逗號
str += ',';
str += sans[i];
}
if (str[0] == ',')
str = str.substr(1);
if (a + b < 0)
str = "-" + str;
cout << str;
}
system("pause");
return 0;
}