當前位置:首頁 » 編程語言 » c語言大數加法
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言大數加法

發布時間: 2023-02-21 04:09:51

c語言實現大整數加法

//把各位的數碼存入字元數組中,注意ASCAII碼的轉換
#include<stdio.h>
#include<string.h>
#include<conio.h>
intmain()
{
ints,t,i,len1,len2;
chars1[30],s2[30],n1[30],n2[30],sum[31];


//將字元串以數碼形式按倒序存儲於新字元串中,便於計算
printf("input2num(小於10^40): ");
scanf("%s%s",&s1,&s2);
len1=strlen(s1);
len2=strlen(s2);
t=0;
for(i=len1;i>=0;i--)n1[t++]=s1[i-1]-48;
t=0;
for(i=len2;i>=0;i--)n2[t++]=s2[i-1]-48;


//高位補0
if(len1>len2)
{
n1[len1]=0;
for(i=len2;i<len1;i++)n2[i]=0;
}
if(len1<len2)
{
n2[len2]=0;
for(i=len1;i<len2;i++)n1[i]=0;
}

//計算
t=0;
s=0;
for(i=0;i<(len1>len2?len1:len2);i++)
{
s=n1[i]+n2[i]+t;//s為數碼之和
sum[i]=s%10;//sum[i]為該位上的數碼
t=s/10;//t為進位
s=0;
}

//輸出
putchar(10);
if(t>0)
{
sum[i]=t;
for(s=i;s>=0;s--)printf("%c",sum[s]+48);
}
else
{
for(s=i-1;s>=0;s--)printf("%c",sum[s]+48);
}
getch();
}

Ⅱ C語言大數相加,在線等,急

效果:

#include<stdio.h>
#include<string.h>

voidreverse(chars[]){
intlen=strlen(s),h=len/2;
chartemp;
for(inti=0;i<h;++i){
temp=s[i];
s[i]=s[len-i-1];
s[len-i-1]=temp;
}
}

#defineSystem10
#defineMAX24
constcharmx='9';
constcharmn='0';

char*Sum(chars1[],chars2[]){
charans[MAX];
intlen1=strlen(s1),len2=strlen(s2),ad=0,min=len1<len2?len1:len2,max=len1>len2?len1:len2,i;
char*st1,*st2;
if(len1>len2){st1=s2;st2=s1;}
else{st1=s1;st2=s2;}
reverse(st1);
reverse(st2);
for(i=0;i<min;i++){
ans[i]=st1[i]+st2[i]-'0'+ad;
if(ans[i]>mx){
ans[i]-=System;
ad=1;
}
elsead=0;
}

while(ad!=0||i<max){
if(i<max)ans[i]=st2[i]+ad;
elseans[i]=mn+ad;
if(ans[i]>mx){
ans[i]-=System;
ad=1;
}
elsead=0;
i++;
}
ans[i]='';
reverse(ans);
returnans;

}

intmain(){
charA[21],B[21],C[50],*ans;
intn,m;
scanf("%d%d",&m,&n);
scanf("%s%s",A,B);
ans=Sum(A,B);
strcpy(C,ans);
printf("%s ",C);
}

Ⅲ C語言大數加法。

#include <stdio.h>
#include <string.h>
void main( ) {
char a[1000], b[1000], c[1001] = {0}, 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--)
{
c[k] = (a[i] - '0' + b[j] - '0' + flag) % 10 + '0';
flag = (a[i] - '0' + b[j] - '0' + flag) / 10;
}
for(; i >= 0; i--, k--) /*若a更長,即a沒有處理完,處理a剩下的高位部分*/
{
c[k] = (a[i] - '0' + flag) % 10 + '0';
flag = (a[i] - '0' + flag) / 10;
}
for(; j >= 0; j--, k--) /*若b更長,則方法同上*/
{
c[k] = (b[j] - '0' + flag) % 10 + '0';
flag = (b[j] - '0' + flag) / 10;
}
if(flag != 0) /*若最終的最高位進位信息不為0*/
{
for(k = len; k > 0; k--)
c[k] = c[k - 1];
c[0] = flag + '0';
}
printf("%s + %s = %s ", a, b, c);
}

運行結果

Ⅳ c語言大數的加法用數組char指針實現

做大數加法,首先要能保存大整數。C能提供的最大的整數類型也就是long long int了吧,還是有上限。用整數類型這條路不通。所以想到把大整數看作字元串(即char數組),一位數字就是數組的一個元素。數組能有多長?幾萬位不止,應付大數加法很輕松。
基本做法就是把兩個加數各自存為字元串。(怎麼把數字轉換成字元?每個數字加'0'就行了。比如 '7'就是7+'0'。)然後從個位起逐位加。(加的時候把字元變回數字,'7'-'0'就是7。)算出來的結果再轉成字元存到第三個數組的相應位里,遇到進位就把上一位加個1,簡單的很。最後第三個字元串就是結果,用puts列印出來就行了。做的時候為了方便可能會把個位存在數組第一位,那樣的話就倒序輸出字元串就行了。
代碼自己寫。

Ⅳ 用C語言做大數加法,怎麼計算進位

把兩個數用數組倒過來存放 比如 567 +789
變成765+987
然後兩個數組就是
a[]={7,6,5};
b[]={9,8,7};
對應的相加變為c數組
c[] ={7+9,6+8,5+7};
變為 16 14 12
然後看進位16留下6,前面進一位14變為15 變為 6 15 12
再看中間15留下5,前面進一位12變為13,變為 6 5 13
再看 13留下3,向前進一位 變為1,那麼最後變為6 5 3 1
最後倒過來,結果就是1356
for (i = 0; i < M; i++)
{
c1[i] += (a1[i] + b1[i]) % 10;
c1[i + 1] += (a1[i] + b1[i]) / 10;
}
這是處理進位的代碼

Ⅵ c語言 大整數加法

#include<stdio.h>
#include<string.h>

//翻轉
void *reverse(char str[])
{
int len =strlen(str);
char*ps,*pe,tmp;
ps=str,pe=str+len-1;
for( ;ps<pe;ps++,pe--)
{
tmp=*ps;
*ps=*pe;
*pe=tmp; //need *
}
return str; //dont't forget return str
}

//相加,並ascii碼變為相應的數字
void add(char a[],char b[])
{
char *pl,*ps;
int i,la,lb,len;
la=strlen(a);
lb=strlen(b);

(la>lb)?(pl=a,ps=b,len=lb):(pl=b,ps=a,len=la);
for(i=0 ;i<len ;i++)
{
pl[i] += ps[i]-96; //96=2*'0'
//don't need *
}

len = (la>lb)?la:lb;
for( ;i<len;i++)
{
pl[i] -= 48; //don't need *
}
for(i=0 ;i<len ;i++)
{
if(pl[i] > 9)
{
pl[i+1]++;
pl[i] %= 10;
}
}
if(pl[len] != 0)
{
printf("%d",pl[len]);
}
for(i=len-1 ;i>=0 ;i--)
{
printf("%d",pl[i]);
}
}

int main()
{
char a[200],b[200];
scanf("%s%s",a,b);

add(reverse(a),reverse(b));
return 0;
}

Ⅶ C語言大數加法運算

LZ錯誤不少啊
#include <stdio.h>
#include <string.h>
int main()
{
char a[1000],b[1000],e[2001];
int i,p,q,k;
int c[1000]={0},d[1000]={0},sum[1001]={0};
int len_a,len_b;

scanf("%s",e);
p=strlen(e);
for(i=0;i<p ;i++)
{
if(e[i]==',')
{
break;
}
a[i]=e[i];
}
len_a=i-1;
i++;
for(k=0;i<p;i++,k++)
b[k]=e[i];
len_b=k-1;
for(i=0;i<=len_a;i++)
c[i]=a[len_a-i]-'0';
for(i=0;i<=len_b;i++)
d[i]=b[len_b-i]-'0';
for(i=0;i<=len_a||i<=len_b;i++)
{
sum[i]+=c[i]+d[i];
if(sum[i]>=10)
{
++sum[i+1];
sum[i]-=10;
}
}
if(sum[i--]>0)printf("1");
for(;i>=0;i--)
printf("%d",sum[i]);

return 0;
}