当前位置:首页 » 编程语言 » c语言大数加法

c语言大数加法

发布时间: 2022-06-12 02:30:04

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]='';
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语言做大数加法,怎么计算进位

把两个数用数组倒过来存放 比如 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;
}
这是处理进位的代码

热点内容
java电话簿 发布:2025-02-07 19:49:26 浏览:795
超级脚本制作 发布:2025-02-07 19:31:30 浏览:486
怎么查看支付宝的账号密码 发布:2025-02-07 19:26:48 浏览:16
惠普服务器查看ip指令 发布:2025-02-07 19:26:47 浏览:434
算法设计模式 发布:2025-02-07 19:15:52 浏览:745
服务器1u能连接几台电脑 发布:2025-02-07 18:50:02 浏览:153
立人编译 发布:2025-02-07 18:48:32 浏览:765
日产途达四驱的有哪些配置 发布:2025-02-07 18:42:02 浏览:832
服务器搭建镜像站 发布:2025-02-07 18:41:55 浏览:377
游戏上云成标配云服务器该怎么选 发布:2025-02-07 18:26:13 浏览:141