[問題] 1+2+3+...加到20位數~~~累加問題
朋友問的一個累加問題,寫了兩小時還是寫不太對,所以來詢問各位大大意見:
1+2+3+...+12345678901234567895
現在我遇到的問題是,累加到後面的位數太多(到20位數
int的記憶體不夠用
我是有想到先用梯形公式處理數字:
(min+max)*max/2+(max/2)+1
之後再用陣列的方式處理:我寫的程式
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
int main()
{
int min=1,i,j;
unsigned int max=18446744073709551615,medi,medi1,math,temp;
char arr[N];
printf("計算1+2+3+...+18446744073709551615為多少\n");
medi=max/2;
//sum=((min+max)*medi+medi+1);
printf("min=");
printf("%d",min);
printf("\n");
printf("max=");
printf("%d",max);
printf("\n");
printf("medi=");
printf("%d",medi);
printf("\n");
memset(arr,0,N);
arr[N-1]=1;
temp=0;
math=0;
for(i=N-1;i>=0;i--){
temp=arr[i]*(min+max)+math;
arr[i]=temp%10;
math=temp/10;
}
for(i=N-1;i>=0;i--){
temp=arr[i]*medi+math;
arr[i]=temp%10;
math=temp/10;
}
medi1=medi+1;
for(i=N-1;i>=0;i--){
temp=arr[i]+medi1;
arr[i]=temp%10;
medi1=temp/10;
}
printf("計算結果為:");
for(i=0;arr[i]==0;i++){}
for(j=i;j<N;j++){
printf("%d",arr[j]);
}
system("pause");
return 0;
}
這樣會比直接用for迴圈累加來的好,
只是寫到這裡,還是卡在記憶體不足的問題,累加頂多加到10位數就極限了
在多加就出現錯誤,所以懇請大大們賜教,幫忙解惑~卸卸!!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.251.136.37
→
12/06 02:50, , 1F
12/06 02:50, 1F
→
12/06 02:51, , 2F
12/06 02:51, 2F
推
12/06 02:58, , 3F
12/06 02:58, 3F
→
12/06 03:01, , 4F
12/06 03:01, 4F
→
12/06 03:01, , 5F
12/06 03:01, 5F
→
12/06 03:02, , 6F
12/06 03:02, 6F
→
12/06 03:12, , 7F
12/06 03:12, 7F
→
12/06 03:13, , 8F
12/06 03:13, 8F
推
12/06 04:09, , 9F
12/06 04:09, 9F
→
12/06 04:11, , 10F
12/06 04:11, 10F
→
12/06 04:11, , 11F
12/06 04:11, 11F
→
12/06 04:14, , 12F
12/06 04:14, 12F
→
12/06 04:17, , 13F
12/06 04:17, 13F
→
12/06 04:17, , 14F
12/06 04:17, 14F
→
12/06 15:58, , 15F
12/06 15:58, 15F
→
12/06 17:36, , 16F
12/06 17:36, 16F
→
12/06 18:28, , 17F
12/06 18:28, 17F
→
12/06 20:48, , 18F
12/06 20:48, 18F
→
12/06 21:08, , 19F
12/06 21:08, 19F
→
12/06 21:09, , 20F
12/06 21:09, 20F
→
12/06 21:13, , 21F
12/06 21:13, 21F
推
12/06 21:18, , 22F
12/06 21:18, 22F
→
12/07 23:03, , 23F
12/07 23:03, 23F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章
11
37