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 最後再反回來 include include void pt int x void ptspace int x int main pt m return 0 include用法 include命令 zhi預處理命令的一種,預處理命令可 dao以將別的源代內 碼內容插入到所容指定的位置 可以標識出只有在特定條件下才... 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是有符號整型第一位元... 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語言報錯...c語言編寫輸出1到100整數,分10行10列。為什麼每一行最
C語言的問題,C語言問題,求助
C語言的小問題求助,C語言報錯的問題?