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)} 正確的 如下 include void main 在你的 中最後的輸出是錯誤的,從 來的d,而且你要輸出的是c吧,就算是d你也沒有定義d,c語言的 一定要先定義再使用,把最後輸出的d改為c就可以了,還有就是標點符號要注意,不要寫錯,一定要注意,要仔細。相應的可以寫出求加減乘除的 如下 include... 看灰過來了 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 ... 選a首先,空格也是一種字元,b d選項分別把空格賦給了c1,c1 其次,c選項不完整,排除 不僅a這樣,10a20b也是可以的。 聽不清啊 答案a 10a 20b cr 是正確的。因為scanf d c 時,會忽略數字前面的空格,遇到非數字字元就會結束讀取 非數字字元會留待下一次讀取,即被後面的 c...c語言簡單加法,C語言做簡單加法
c語言大數階乘運算,C語言大數階乘運算
C語言問題,C語言問題C語言問題