1. 程式人生 > >1001. A+B Format

1001. A+B Format

可能 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