1. 程式人生 > >HDU 1047(大數相加)(陣列模擬)

HDU 1047(大數相加)(陣列模擬)

  這個題目啊,其實紮實的做的話應該並不難,然而我想看是統一用字串,還是再轉化成陣列,然後看了別人的題解,傻冒一樣的像別人一樣謝了getchar();真是傻冒了,我用的scanf("%s",str),跟它有個什麼關係,難道是這幾天有點急功近利,所以才著急看別人的思路,淡定啊,自己的才是最好的!!

  只需要用一個數組,將每次輸入的字串轉化並加上就行了!(最後輸出格式也要注意下)

程式碼如下:

//HDU 1047 陣列模擬大數
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
    int n,i,j;
    cin>>n;
    while(n--)
    {
        char str[110];
        int sum[110]={0};//如果放到開頭定義,別忘了memset();
        while(~scanf("%s",str)&&str[0]!='0')
        {
            for(i=strlen(str)-1,j=0;i>=0;i--,j++)
            {
                sum[j]+=str[i]-48;//轉化成數字並加到陣列上
                if(sum[j]>9)//大於9進位
                {
                    sum[j]-=10;
                    sum[j+1]+=1;
                }
            }
        }
        for(i=105;i>=0;i--)
            if(sum[i])//找到首位數字
                break;

        for(j=i;j>=0;j--)
            cout<<sum[j];
        if(i<0)
            cout<<0;
        cout<<endl;
    if(n)
        cout<<endl;
    }
    return 0;
}