c語言大數加法,C語言大數加法。

時間 2022-02-01 20:17:44

1樓:匿名使用者

#include

#include

void main( ) , flag = 0;  /*c:存放結果,flag:進位資訊*/

int i, j, k, m, n, len; /*i:跟蹤a的下標,j:跟蹤b的下標,k:跟蹤c的下標*/

scanf("%s%s", a, b);

m = strlen(a);

n = strlen(b);

len = (m > n) ? m : n;

/*相加時,先將右邊對齊,即將i指向a的右端,j指向b的右端,

然後i、j對齊,同步向左移動,直到其中一個到頭為止*/

for(i = m - 1, j = n - 1, k = len - 1; i >= 0 && j >= 0; i--, j--, k--)

for(; i >= 0; i--, k--)  /*若a更長,即a沒有處理完,處理a剩下的高位部分*/

for(; j >= 0; j--, k--)  /*若b更長,則方法同上*/

if(flag != 0) /*若最終的最高位進位資訊不為0*/

printf("%s + %s = %s\n", a, b, c);

}執行結果

2樓:匿名使用者

思路不好,再細也沒有用,見下面的**,五行搞定。

/* 資料從最低位開始,即個位在索引0,十位在索引1 */int i, a[100], b[100], c[100];

for (i = 0; i < 100; ++i)c[i] = a[i] + b[i];

/* 處理進位 */

for (i = 0; i < 100; ++i)

c語言 大數相加

3樓:蕭風隨月

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;}

4樓:天什麼時候會空

#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

5樓:尋平陽

#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語言如何實現多對大數相加?

6樓:流星不死

逆序存放再考慮相加

進位只要判斷

if(a[i]-48+b[i]-48>=10)c=1;

else

c=0;

c語言超大數做加法,怎麼定義

7樓:鋼神綠鋼

#include

void main()

8樓:

用char型陣列定義。

比如你要定義一個1000位的數字,則用char num[1001];

9樓:投機士

可以用陣列製作。

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

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

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

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

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

10樓:張黑牛

/*目標:實現任意位數(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;}

11樓:黑丶雨

#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語言「字串大整數加法」這題怎麼做?

12樓:這是我小號

#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,先將這兩個*字串逆轉並且分位儲存到兩個整型陣列裡面(因為做加法時*從低位開始相加),然後就和手工演算法一樣依次相加。*/

13樓:流星不死

# 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;

}沒仔細研究

14樓:匿名使用者

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

我的想法是定義來好字串 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

最後再反回來

15樓:匿名使用者

#include

#include

int a[201],b[201];

char c[201];

int main()

}for(i=s+1;i>=1;i--)

if(a[i]!=0||k==1||i==1)}

c語言簡單加法,C語言做簡單加法

正確的 如下 include void main 在你的 中最後的輸出是錯誤的,從 來的d,而且你要輸出的是c吧,就算是d你也沒有定義d,c語言的 一定要先定義再使用,把最後輸出的d改為c就可以了,還有就是標點符號要注意,不要寫錯,一定要注意,要仔細。相應的可以寫出求加減乘除的 如下 include...

c語言大數階乘運算,C語言大數階乘運算

看灰過來了 include int main return 0 1 1 2 2 3 6 4 24 5 120 6 720 7 5040 8 40320 9 362880 10 3628800 11 39916800 12 479001600 13 6227020800 14 87178291200 ...

C語言問題,C語言問題C語言問題

選a首先,空格也是一種字元,b d選項分別把空格賦給了c1,c1 其次,c選項不完整,排除 不僅a這樣,10a20b也是可以的。 聽不清啊 答案a 10a 20b cr 是正確的。因為scanf d c 時,會忽略數字前面的空格,遇到非數字字元就會結束讀取 非數字字元會留待下一次讀取,即被後面的 c...