1. 程式人生 > >求1+2+…+n,要求不能使用乘除法、for、while、if、else...

求1+2+…+n,要求不能使用乘除法、for、while、if、else...

題目:求1+2+…+n,

要求不能使用乘除法、for、while、if、else、switch、case等關鍵字以及條件判斷語句(A?B:C)。

其實會有很多種解法,但是下面給出了一個簡單的程式碼-----巧用遞迴演算法。

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

int add_fun(int n, int & sum)
{
	n && add_fun(n-1, sum);
	
	return (sum += n);
}

int main()
{
	int sum = 0;
	int n = 100;

	printf("1+2+...+n = %d\n", add_fun(n, sum));

	return 0;
}

順便記錄下一些容易忘記的題目:

int a[3][5],*p=a,(*)q[5]=a;設a的地址為2000,則下述語句的輸出的結果?? 
printf(“%u%u\n”,p+6,*(q+1)+4); 

理解不了的地方:(*)q[5]=a,這句話是什麼意思呢?實在是費解,還請大牛給分析下
首先說明這短短兩條語句,卻包括了兩處語法錯誤:1,*p = a 這句是不合法的,兩個值的型別不同,前者是整形指標,後者是陣列指標,如果你一定要這樣做的話應該這樣寫 *p = (int *)a 強制轉換; 2,(*)q[5] = a 這句也是不對的(或者是我見識少,從未見過這種寫法),程式的意思可能是這樣 (*q)[5] = a 將q定義為陣列指標。 
經過兩處改動後,再來看,假如a的地址是2000,int是4個位元組的話。那麼p+6的值就是2000 + 4*6 = 2024; *(q+1)+4 的值就是 2000 + 5*4 + 4*4。 
最後,你說(*)q[5]=a 不理解,我認為是不解 (*q)[5] = a 這句,其實這是定義了一個數組指標,該指標指向的是一個數組。例如 ++q,是將q移動一個數組的距離,在本例中就是 4*5 。