PAT1001 A+B Format

      現在算是爲了保研機試做準備吧,很久不練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;
	
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章