HDUOJ入坑的第一天--------1002題(計算A+B)

HDUOJ入坑的第一天--------1002題(計算A+B)

今天去HDUOJ逛了一下,嘗試了一下以前競賽的練習題,結果第一道題就被坑了,說出來你可能不信,A+B我居然不會。。。。。。看下題目吧:

在這裏插入圖片描述

題目意思大致說一下,就是求給定n組數對,求每對數的和,嗯,看起來簡單吧,我也覺得,可是事實是這樣的。。。。。。。。:

在這裏插入圖片描述
我當時很懵,我小學學的還是挺好的,怎麼加法都不會了。。。。。。。
然後
又看了一遍題目,突然想到這裏它說得的加法它的數字位數有貓膩,(去他的Integer,就知道誤導學生入坑),10000位的整數。。。。。int小身子板它表示不出來,所以,機智的我改用了char類型數組,下面是我的代碼,(已ac)


#include <stdio.h>
#include <string.h>

int main() {
	/*
	* n代表要計算幾次
	* num1len 表示第一個數的長度位數, num2len 表示第二個數的長度位數, sumlen;
	*/
    int n, temp, num1len, num2len, sumlen;
    /*存放結果的*/
    int sum[10000];
	/*輸入參數*/
    scanf("%d", &n);
   
    for (int i =1; i <= n; i++)
    {
    	
        char num1[10000], num2[10000], temp1[10000], temp2[10000];

        temp = 0;
        scanf("%s %s", temp1, temp2);
		 /*拷貝一份兩個加數,用於後面的加法轉換 */
		for (int l1 = 0; l1 <= strlen(temp1); l1++)
        {
            num1[l1] = temp1[l1];
        }

        for (int l2 = 0; l2 <= strlen(temp2); l2++)
        {
            num2[l2] = temp2[l2];
        }

        num1len = strlen(num1);
        num2len = strlen(num2);
        /*求出和的最小位數*/
        sumlen = (num1len > num2len ? num1len : num2len);
		/*將備份數組反過來,逐位對齊,
		*1234
		*123456
		*操作後
		*432100
		*654321
		*/
        if (num1len > num2len)
        {
            for (int r = sumlen - 1, s = num2len - 1; r >= 0; r--, s--)
            {
                if (r >= sumlen - num2len)
                {
                    num2[r] = num2[s];
                } else
                {
                    num2[r] = '0';
                }
            }
        } else
        {
            for (int r = sumlen - 1, s = num1len - 1; r >= 0; r--, s--)
            {
                if (r >= sumlen - num1len)
                {
                    num1[r] = num1[s];
                } else
                {
                    num1[r] = '0';
                }
            }
        }
		/*逐位相加,滿十近一*/
        for (int z = sumlen - 1; z >= 0; z--)
        {
            sum[z] = (num1[z] + num2[z] + temp - 2 * '0') % 10;
            temp = (num1[z] + num2[z] - 2 * '0' + temp) / 10;
        }
		/*打印結果*/
        printf("Case %d:\n", i);
        printf("%s + %s = ", temp1, temp2);
        if (temp)
        {
            printf("%d", temp);
        }
        for (int w = 0; w < sumlen; w++)
        {
            printf("%d",sum[w]);
        }
        printf("\n");
        if (i != n)
        {
            printf("\n");
        }
    }
    
    return 0;
}

寫的有點亂,但思路是這樣,需要注意的是,這裏不能用int
結果(ac了,開心,哈哈哈,我還不傻):
在這裏插入圖片描述

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