求助c語言大整數的加法可達1010000000位

2022-03-01 12:43:12 字數 5887 閱讀 7824

1樓:匿名使用者

在本地除錯沒有問題,估計是因為陣列開的太大,你提交的時候編譯環境可以選c++或gc++之類的,它們支援開的陣列較大

還有就是要用大陣列的話,最好定義成全域性變數,全域性變數儲存在堆中,空間較大。函式內的區域性變數儲存在棧中,空間比較小。

還有就是交換字串有個巧妙的辦法,不用真正交換,而是用改變字串指標的方法,具體**如下

#include

#include

char s[100001];

char s11[100001];

char s22[100001];

int main()

i=strlen(s1)-1;

j=strlen(s2)-1;

後面不變

2樓:墜入地獄之王者

首先你的字串開的太小,至少應是10000000,再說這樣大的數已不適合用直接的加法了。有更高效的做法,網上有很多。

3樓:手機使用者

整數整個做成一個科學記數法表示的物件

第二步:計算加法,從低到高合併同一計數級的物件第三步:從高到低把這個物件轉換成一個char陣列,並列印出來乘法是加法的昇華:

第一步:拆成(a1+b1+c1...)*(a2+b2+c2...)格式。

第二步:做一個i*j次的迴圈,生成一個新的科學計數物件第三步:從高到低把這個物件轉換成一個char陣列,並列印出來

4樓:戈壁與清潭

呵呵,佔用的記憶體太多了,不好整所以猜出錯的#include

#include

#define n 10000000

void sswap(char str1,char str2)else strcpy(temp,str2);

n=0;

while(str1[i])

while(temp[n])

strcpy(str2,temp);

}void main()

怎樣用c語言做超大整數的加減運算?

5樓:匿名使用者

用高精度演算法來實現,即用陣列或指標來儲存數字,例如a〔20〕來儲存a ,用b〔20〕來儲存b,這樣a 和b就可以是很大的數,再用一個c〔21〕來儲存結果,為什麼c要21呢,你知道,加法是要近位的,呵呵。這裡給出相加的偽**,d =0/*用來儲存近位*/,for i=0到19if d 不等於0 c〔i+1〕=d ,再逆的輸出c就可以了!程式設計要學會思考,現在你可以試試編下高精度乘法,例如可以輸出100的階乘!

6樓:匿名使用者

可以用陣列製作。

都知道int,float,double的精度和可使用的範圍都是有限的,對於大數相減,總是會產生溢位的情況。

所以對於大數相減,認為可以用陣列來做。比如,定義一個陣列a[100];a[1]用來儲存個位數,a[2]用來儲存十位數,等等。

如果a[i]的值大於或等於10,就讓a[i+1]++,a[i]-10就行了。

在列印的時候就用一個for語句,再調一下輸出格式就可以了。

7樓:匿名使用者

可以用兩個整數來表示一個整數,一個高位,一個低位

c語言 大數相加

8樓:蕭風隨月

c/c++中int和unsigned型別變數,都不能儲存超過10位的整數,但有時我們需要計算位數非常長的整數或小數的加法。一般我們稱這種基本資料型別無法表示的整數為大整數。如何表示和存放大整數呢?

基本的思想就是:用陣列存放和表示大整數。一個陣列元素,存放大整數中的一位。

現在假如我們要計算倆個200位數的加法。顯然,任何c/c++固有型別的變數都無法儲存它。最直觀的想法是可以用一個字串來儲存它。

字串本質上就是一個字元陣列,因此為了程式設計更方便,我們也可以用陣列int an[200]來儲存一個200 位的整數,讓an[0]存放個位數,an[1]存放十位數,an[2]存放百位數……那麼如何實現兩個大整數相加呢?方法很簡單,就是模擬小學生列豎式做加法,從個位開始逐位相加,超過或達到10 則進位。也就是說,用int an1[201]儲存第一個數,用int an2[200]表示第二個數,然後逐位相加,相加的結果直接存放在an1 中。

要注意處理進位。另外,an1 陣列長度定為201,是因為兩個200 位整數相加,結果可能會有201 位。實際程式設計時,不一定要費心思去把陣列大小定得正好合適,稍微開大點也無所謂,以免不小心沒有算準這個「正好合適」的數值,而導致陣列小了,產生越界錯誤。

下面是具體程式:

#include

#include

#definemax_len 200

int an1[max_len+10];

int an2[max_len+10];

charszline1[max_len+10];

charszline2[max_len+10];

int main(void)

}for( i = max_len; (i>= 0) && (an1[i] == 0); i-- ) ;

if(i>=0)

for( ; i >= 0; i--)

printf("%d", an1[i]);

else     printf("0");

return 0;}

9樓:天什麼時候會空

#include

void main()

,d[10]=,e[11]=;

scanf("%s",&a);

scanf("%s",&b);

int k,i,f=0,max,min;

int dight=0,digit=1;//dight進位 digit總位數

k=(strlen(a)-1);

i=(strlen(b)-1);

max=k>i?k:i;

min=k9)

else

}digit++;

}int s=1;

for(f=1;f<=(max-min);f++)s++;

digit++;

if(e[max]>9) digit++;

}int u;

for(u=0;u

10樓:尋平陽

#include

#include

void main()

,d[10]=,e[11]=;

scanf("%s",&a);

scanf("%s",&b);

int k,i,f=0,max,min;

int dight=0,digit=0;//dight進位 digit總位數

k=(strlen(a)-1);

i=(strlen(b)-1);

max=k>i?k:i;

min=k9)

//else//}

digit++;

}if((dight==1)&&((max-min)==0))int s=1;

for(f=1;f<=(max-min);f++)s++;

digit++;

//if(e[max]>9) digit++;

}int u;

for(u=0;u

printf("%d",e[u]);}

大整數加法怎麼寫.c語言

11樓:張黑牛

/*目標:實現任意位數(1000位以內)的兩個大正整數的加法*/#include

#include

#include

#define maxsize 1000

int max(int a, int b)int main(), n2[maxsize] = , sum[maxsize] = ;

scanf("%s%s", str1, str2);

int len1 = strlen(str1);

int len2 = strlen(str2);

int len = max(len1, len2);

int i;

for(i = 0; i < len1; i++)for(i = 0; i < len2; i++)for(i = 0; i <= len; i++)}i = sum[len] == 0 ? len - 1 : len; // 判斷和的最高位是否為0

for(; i >= 0; i--)

printf("\n");

return 0;}

12樓:黑丶雨

#include

#include

#include

#define size 100  //最高相加位數,可修改;

void fanzhuan(char *x);  //反轉字串,方便相加;

char *jiafa(char *x, char *y); //高精度加法函式

int main(void)

;char num2[size] = ;

printf("請輸入第一個數:");

gets(num1);

printf("請輸入第二個數:");

gets(num2);

printf("相加結果:%s\n", jiafa(num1, num2));

return 0;

}void fanzhuan(char *x)

}char *jiafa(char *x, char *y)

else

}char *t2 = strlen(x) > strlen(y) ? x : y;

for(i = strlen(t1); i < strlen(t2); ++i)

else

}if(jinwei)

temp[i] = '1';

fanzhuan(temp);

return temp;}

c語言「字串大整數加法」這題怎麼做?

13樓:這是我小號

#include

#include

#define maxd 100

int main()

}if(num2[max]) printf("%d",num2[max]);//如果最高位產生進位

for(i=max-1; i>=0; i--)printf("%d",num2[i]);

printf("\n");

}return 0;}/*

*過程如下,假設輸入兩個字串123456和987654,先將這兩個*字串逆轉並且分位儲存到兩個整型陣列裡面(因為做加法時*從低位開始相加),然後就和手工演算法一樣依次相加。*/

14樓:流星不死

# include

# include

int main()

else

}if(k3>k4)

}else

}result[j] = 0;

//puts(result);

c = 0;

for(i=strlen(result)-1;i>=0;i--)result2[c] = 0;

printf("%s",result2);

return 0;

}沒仔細研究

15樓:匿名使用者

分長一倍,會有好多人來搶著做啊

我的想法是定義來好字串 a[n],b[n],c[n],再定義一個 flag標記是不是進位,初始值是零反轉順序,比如輸入的是 123456,反轉後變成 654321就是讓個位數剛好在 a[0]位置

for迴圈,直到兩個數都到最高位

tmp=a[i]+b[i]-'0'-'0';

c[i]=tmp%10+flag

flat=tmp/10

最後再反回來

c語言編寫輸出1到100整數,分10行10列。為什麼每一行最

include include void pt int x void ptspace int x int main pt m return 0 include用法 include命令 zhi預處理命令的一種,預處理命令可 dao以將別的源代內 碼內容插入到所容指定的位置 可以標識出只有在特定條件下才...

C語言的問題,C語言問題,求助

1.設x的值為3,則表示式 x x x x 的值為?x先進行4次加1運算為7,後再相加為28 2.用long a 0xffffff int b char c 定義。執行b a,c b b後。b c的值為?a為長整型三個位元組為全1,賦值給b後b是整型,b的2個位元組也是全1,但b是有符號整型第一位元...

C語言的小問題求助,C語言報錯的問題?

define crt secure no warnings include include int count int n 求階乘return count int main printf c c 學習q u n 99816772 d n num system pause return 0 c語言報錯...