1001. A+B Format
阿新 • • 發佈:2018-11-26
可能 printf 我想 字符數 變量 clu 其他人 int .cn
題目
解題過程
這道題的關鍵點就是想辦法按三位取逗號的標準輸出,也就是在格式上做了一點要求,思路很簡單。
#include <iostream> #include <cstdio> #include <cmath> using namespace std; int main() { /* Sum是A、B之和,tmp是中間變量,i用於循環 */ int A, B, Sum, tmp, i; /* IsStart用於判斷是否為首高位輸出 */ bool IsStart; cin>>A>>B; Sum=A+B; tmp=0; IsStart=false; if(Sum<0) /* 如果是負整數,先輸出‘-‘,再按正整數處理 */ { cout<<‘-‘; Sum=abs(Sum); } else if(Sum==0) /* 如果為0,直接輸出 */ { cout<<Sum; return 0; } for(i=1000000; i>=1; i/=1000) /* 從高位向低位處理 */ { tmp=Sum/i; if(tmp && !IsStart) /* tmp存在且IsStart還是初值,判斷為首高位 */ { cout<<tmp; IsStart=true; /* 改值,說明首高位已輸出 */ } else if(!tmp && !IsStart) /* 判斷為首高位之前的位數,不輸出 */ continue; else /* 首高位之後的數,tmp為0也要輸出 */ { cout<<‘,‘; /* 添加分號 */ printf("%03d", tmp); /* 強制輸出3位數,前面空缺用0補全 */ } Sum-=tmp*i; } return 0; }
總結
一開始我想用字符數組解決這個問題,後來實在想不出來才改用這種方法。比之其他人的方式倒是沒看出來優劣,可能我的代碼更加長一點,所以也就不貼出來其他好的解題思路了。
這道題的對我這種思路的卡題點有三處:第一是能不能按照三位一個逗號的標準輸出;第二是首高位前沒有0補全輸出,但是首高位後需要0補全。所花時間也多在這上面。
1001. A+B Format