c語言大數加法
⑴ c語言大數的加法用數組char指針實現
做大數加法,首先要能保存大整數。C能提供的最大的整數類型也就是long long int了吧,還是有上限。用整數類型這條路不通。所以想到把大整數看作字元串(即char數組),一位數字就是數組的一個元素。數組能有多長?幾萬位不止,應付大數加法很輕松。
基本做法就是把兩個加數各自存為字元串。(怎麼把數字轉換成字元?每個數字加'0'就行了。比如 '7'就是7+'0'。)然後從個位起逐位加。(加的時候把字元變回數字,'7'-'0'就是7。)算出來的結果再轉成字元存到第三個數組的相應位里,遇到進位就把上一位加個1,簡單的很。最後第三個字元串就是結果,用puts列印出來就行了。做的時候為了方便可能會把個位存在數組第一位,那樣的話就倒序輸出字元串就行了。
代碼自己寫。
⑵ 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;
}
⑶ C 語言 大數相加
這個只能用字元串來解決
void fx(char *x,int n)
{
char *p1=x,*p2=x+n; //這個可能控制不好,也就是1個位置的誤差,自己調整一下吧
char t;
while(p1<p2)
{t=*p1;*p1=*p2;*p2=t;p1++;p2++;}
}
main()
{
char a[100],b[100];
int c[100],d[100];e[101]={0};
int l1,l2,l3;
int i,n=100;
gets(a);
gets(b); //輸入a,b。可以帶printf標示輸入這兩個數,隨你
//反序a,b,這個可以做個子函數,
l1=strlen(a);
fx(a,l1);
l2=strlen(b);
fx(b,l2);
for(i=0;i<l1;i++) //轉換成整數
c[i]=a[i]-'0';
for(i=0;i<l2;i++)
d[i]=b[i]-'0';
l3=l1>l2?l1:l2;
e[0]=c[0]+d[0];
for(i=1;i<l3;i++)
{
e[i]=c[i]+d[i]+e[i-1]/10; //加上前一位的進位
e[i-1]%=10; //把前一位弄成個位數
}
//處理最高位
e[i+1]=e[i]/10;
e[i]%=10;
//反序輸出就可以了,可以處理一下高位餘下的零
while(!e[n])
n--;
for(i=n;i>=0;i--)
printf("%d",e[i]);
}
基本思路就是這樣,我沒有運行,可能有些小錯誤,自己解決一下吧
⑷ 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]='